——以GNSS軟件控制點(diǎn)編輯界面為例"/>
999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

針對Datagridview控件裝載數(shù)據(jù)時發(fā)生的錯誤及其解決辦法
——以GNSS軟件控制點(diǎn)編輯界面為例

2018-05-28 08:18:08趙睿
電子技術(shù)與軟件工程 2018年8期

文/趙睿

1 引言

Datagridview是C#程序中強(qiáng)大的數(shù)據(jù)控件,可以以表格形式將數(shù)據(jù)顯示給用戶,同時允許用戶在該控件上進(jìn)行數(shù)據(jù)編輯。在GBC開發(fā)過程中,應(yīng)用了許多Datagridview的相關(guān)功能。但當(dāng)綁定數(shù)據(jù)后,DataGridView在編輯時經(jīng)常會拋出異常。在此以控制點(diǎn)編輯界面為例,探討Datagridview控件拋出異常的原因及解決辦法。

2 Datagridview綁定數(shù)據(jù)源后常見問題及解決辦法

Datagridview顯示數(shù)據(jù)采用了綁定數(shù)據(jù)源,然后按照列名將各項(xiàng)數(shù)據(jù)顯示在所需的列的方法。這種方法在綁定數(shù)據(jù)時簡便易行。但是在試圖對Datagridview進(jìn)行編輯或者修改時碰到了諸多問題。因?yàn)閐atagridview占用的線程屬于能夠與用戶交互的線程(簡稱UI線程)如:按鈕、輸入框等。這類控件為了可以隨時響應(yīng)用戶的操作信息,處在一個類似“一直在線”的狀態(tài)。為了保證線程安全以及提高代碼的運(yùn)行效率,微軟禁止了從非創(chuàng)建這個控件的線程中訪問這個控件。

解決該問題的辦法主要有兩種:一、把控件的CheckForIllegalCrossThreadCalls屬性設(shè)置為false來允許不同線程對控件進(jìn)行操作。但是如果采用這種辦法,在有兩個或多個線程操作這一控件的狀態(tài)時,則可能會迫使該控件進(jìn)入一種不一致的狀態(tài)。還可能出現(xiàn)其他與線程相關(guān)的 bug,包括爭用情況和死鎖。二、引用命名空間System.Threading,將涉及更新控件的代碼封裝成一個方法,通過Invoke或者BeginInvoke調(diào)用。

System.Threading 命名空間提供了大量可以進(jìn)行多線程編程的類和接口。可以實(shí)現(xiàn)如獲取當(dāng)前進(jìn)程狀態(tài),掛起線程,阻塞調(diào)用線程直至某個線程終止等多種功能。包括進(jìn)度條,指定時間間隔等操作都需要引用該命名空間。這里要用到其中的Invoke()方法。Invoke方法首先檢查發(fā)出調(diào)用的線程(即當(dāng)前線程)是不是UI線程,如果是,直接執(zhí)行委托指向的方法,如果不是,它將切換到UI線程,然后執(zhí)行委托指向的方法。不管當(dāng)前線程是不是UI線程,Invoke都阻塞直到委托指向的方法執(zhí)行完畢,然后切換回發(fā)出調(diào)用的線程,返回。保證程序的正常運(yùn)行。

3 DataGridView中數(shù)據(jù)的編輯

在編輯界面加入Datagridview控件,命名為dataGridViewX1。創(chuàng)建一個記錄所有控制點(diǎn)相關(guān)信息的全局變量DataTable,命名為dt。dataGridViewX1綁定dt作為數(shù)據(jù)源。在用戶對datagridview顯示的數(shù)據(jù)進(jìn)行編輯、刪除、添加等操作時,保證該datatable的數(shù)據(jù)也進(jìn)行相同操作。使datagridview與datatable始終保持同步。最后保存數(shù)據(jù)時,可以直接獲得該datatable做最終的數(shù)據(jù)。

輸入以下代碼:MyInvoke mi = new MyInvoke(DataGridViewBound);

其中數(shù)據(jù)綁定(DataGridViewBound)中可以將之前的數(shù)據(jù)源綁定和列數(shù)據(jù)綁定添加進(jìn)來。

之后,如果需要對控制點(diǎn)數(shù)據(jù)進(jìn)行編輯修改,只要對dt進(jìn)行相關(guān)修改后引用代碼:

就可以實(shí)現(xiàn)dataGridViewX1顯示的數(shù)據(jù)與dt的同步,不會因?yàn)閐ataGridViewX1已綁定數(shù)據(jù)而報錯。

3.1 在DataGridView中實(shí)現(xiàn)下拉菜單

按照程序需求,在dataGridViewX1中“參考橢球”、“參考框架”和“高程系統(tǒng)”這三個列可以點(diǎn)擊后出現(xiàn)下拉菜單,從中選擇相應(yīng)的選項(xiàng)。這三個列要求基本相同,以下以“參考橢球”列為例。

在窗體中添加comboBox控件,命名為cmbellipsoid,

作為控制點(diǎn)基準(zhǔn)的“參考橢球”在數(shù)據(jù)庫中是以其ID號記錄的。而相關(guān)信息顯示在數(shù)據(jù)表格上時則應(yīng)該顯示其名稱。這里需要利用數(shù)據(jù)庫中“Ellipsoid”表將“參考橢球”的ID號與名稱關(guān)聯(lián)起來。此外“Ellipsoid”表也作為cmbellipsoid的數(shù)據(jù)源。

下拉控件初始設(shè)置為不可見,在鼠標(biāo)點(diǎn)擊相應(yīng)的單元格時,判斷鼠標(biāo)點(diǎn)擊是否為所在列。如果符合要求,則使下拉控件在單元格內(nèi)可見,大小與單元格相同。

在鼠標(biāo)點(diǎn)擊單元格事件中輸入以下代碼:

//獲取所選單元格的值,保證在顯示下拉菜單時,下拉菜單中所選的值與所選單元格的值相同,最后使下拉菜單可見

在離開單元格時,將用戶已選則的選項(xiàng)寫入dt,并使下拉菜單不可見。在鼠標(biāo)離開單元格事件中添加以下代碼:

如果用戶在點(diǎn)開下拉菜單后沒有進(jìn)行選擇,直接拖動滾動條,會看見下拉菜單始終保持在初始顯示的位置,與所選單元格脫離。

在dataGridViewX1的拖動滾動條事件中添加以下代碼:this.cmbellipsoid.Visible = false;保證在拖動滾動條時,下拉菜單是隱藏的。

3.2 右鍵菜單

在datagridview中點(diǎn)擊右鍵可以顯示菜單,以下以“刪除”功能為例,講解實(shí)現(xiàn)方法。

首先添加contextMenuStrip1控件,將dataGridViewX1的ContextMenuStrip屬性設(shè)置為contextMenuStrip1。并在contextMenuStrip1控件中添加“刪除”欄。在點(diǎn)擊“刪除”欄的事件中獲取dataGridViewX1當(dāng)前具有焦點(diǎn)單元格的控制點(diǎn)信息,刪除數(shù)據(jù)庫中與之相同的數(shù)據(jù)。

該方法中獲得信息的當(dāng)前具有焦點(diǎn)單元格可能會與用戶實(shí)際想要刪除的單元格不符。例如:鼠標(biāo)選中第一行后,在第二行點(diǎn)擊右鍵。第一行仍然是被選中狀態(tài),代碼獲取的控制點(diǎn)信息就是第一行的。因此,應(yīng)當(dāng)在dataGridViewX1的CellMouseDown事件中添加代碼,保證右鍵點(diǎn)擊時,鼠標(biāo)所點(diǎn)的單元格即為焦點(diǎn)單元格。

4 結(jié)束語

Datagridview數(shù)據(jù)源綁定datable后按照上文方法進(jìn)行了編寫,程序應(yīng)用達(dá)到了預(yù)期效果,界面簡單易懂,操作方便。之后也在該GBC程序其他其他界面廣泛應(yīng)用。

物探測量需求推動著GNSS技術(shù)與數(shù)據(jù)處理的不斷進(jìn)步。GNSS的多種測量模式也愈加成熟。該款GNSS軟件針對石油物探測量,擁有廣大的應(yīng)用需求。

參考文獻(xiàn)

[1]季宇虹,王讓會.全球?qū)Ш蕉ㄎ幌到y(tǒng)GNSS的技術(shù)與應(yīng)用[J].全球定位系統(tǒng),2010(05):69-75.

[2]王偉.基于C#技術(shù)的對賬系統(tǒng)設(shè)計與實(shí)現(xiàn)[J].科技創(chuàng)新與生產(chǎn)力,2013(09):76-79.

[3]朱瑞芳.DataGridView控件應(yīng)用示例[J].電腦知識與技術(shù),2015(25):189-191.

主站蜘蛛池模板: 欧美日韩专区| 国产手机在线小视频免费观看| 国产精女同一区二区三区久| 欧美亚洲欧美区| 国产无码性爱一区二区三区| 亚洲精品在线观看91| 欧美国产日韩在线| 久久黄色小视频| 2020精品极品国产色在线观看| 亚洲国产av无码综合原创国产| 国产性精品| 国产高清在线丝袜精品一区| 欧美va亚洲va香蕉在线| 国产欧美日韩在线在线不卡视频| 国产91小视频在线观看| 久久免费视频6| 国产精品自在拍首页视频8| 99re在线观看视频| 青草视频久久| 免费jizz在线播放| 成人国内精品久久久久影院| 狠狠ⅴ日韩v欧美v天堂| 亚洲成aⅴ人片在线影院八| 亚洲美女一级毛片| 中文字幕欧美成人免费| 国产丰满大乳无码免费播放 | 国产精品视频公开费视频| 亚洲系列无码专区偷窥无码| 女人一级毛片| 国产在线八区| 欧美日韩精品在线播放| 思思热精品在线8| 四虎成人精品| 国产亚洲男人的天堂在线观看| 国产杨幂丝袜av在线播放| 台湾AV国片精品女同性| 毛片久久久| 精品国产女同疯狂摩擦2| 欧美一区精品| 久久久久无码精品| 欧洲av毛片| 亚洲人视频在线观看| 成人亚洲国产| 在线国产毛片| 亚洲国产精品日韩av专区| 国产黄色免费看| 全部无卡免费的毛片在线看| 一本一道波多野结衣av黑人在线| 热久久综合这里只有精品电影| 亚洲精选无码久久久| 国产乱子伦视频三区| 亚洲久悠悠色悠在线播放| 成人欧美日韩| 无码免费的亚洲视频| 国产第四页| 亚洲精品视频免费看| 日韩国产黄色网站| 国产一级毛片在线| 玖玖精品在线| A级全黄试看30分钟小视频| 亚洲制服丝袜第一页| 久久婷婷色综合老司机| 精品视频一区在线观看| 亚洲国产成熟视频在线多多| 国产9191精品免费观看| 国产精品亚洲专区一区| 国内丰满少妇猛烈精品播 | 欧美色伊人| 成人午夜网址| 国产精品丝袜在线| 精品人妻AV区| 久久国产高清视频| 欧美一区二区丝袜高跟鞋| 午夜国产精品视频黄| 亚洲国产一成久久精品国产成人综合| 亚洲国产天堂久久九九九| 久久精品丝袜| 91精品福利自产拍在线观看| 国产日韩精品欧美一区喷| 激情五月婷婷综合网| 日本午夜视频在线观看| 五月婷婷导航|