datagridview绑定与详细说明 (搜集)
? 1、實現一個用于處理數據庫教程數據檢索的詳細信息的方法。
? 下面的代碼示例實現一個 getdata 方法,該方法對一個 sqldataadapter 組件進行初始化,并使用該組件填充 datatable。
?然后,將 datatable 綁定到 bindingsource 組件。請確保將 connectionstring 變量的值設置為與數據庫相應的值。?
1 private void getdata(string selectcommand) 2 { 3 try 4 { 5 string connectionstring = "integrated security=sspi;persist security info=false;" + "initial catalog=northwind;data source=localhost"; dataadapter = new sqldataadapter(selectcommand, connectionstring); 6 sqlcommandbuilder commandbuilder = new sqlcommandbuilder(dataadapter); 7 datatable table = new datatable(); 8 table.locale = system.globalization.cultureinfo.invariantculture; dataadapter.fill(table); 9 bindingsource1.datasource = table; datagridview1.autoresizecolumns( datagridviewautosizecolumnsmode.allcellsexceptheader); 10 } 11 catch (sqlexception) 12 { messagebox.show("to run this example, replace the value of the " + "connectionstring variable with a connection string that is " + "valid for your system."); 13 } 14 } View Code?
??2、在窗體的 load 事件處理程序中,將 datagridview 控件綁定到 bindingsource 組件,并調用 getdata 方法從數據庫中檢索數據??
1 private void form1_load(object sender, system.eventargs e) 2 { 3 datagridview1.datasource = bindingsource1; 4 getdata("select * from customers"); 5 } View Code?
① 取得或者修改當前單元格的內容 ② 設定單元格只讀 ③ 不顯示最下面的新行 ④ 判斷新增行 ⑤ 行的用戶刪除操作的自定義 ⑥ 行、列的隱藏和刪除 ⑦ 禁止列或者行的resize ⑧ 列寬和行高以及列頭的高度和行頭的寬度的自動調整 ⑨ 凍結列或行 ⑩ 列順序的調整 ? 行頭列頭的單元格 ? 剪切板的操作 ? 單元格的tooltip的設置 ? 右鍵菜單(contextmenustrip)的設置 ? 單元格的邊框、 網格線樣式的設定 ? 單元格表示值的設定 ? 用戶輸入時,單元格輸入值的設定 ? 設定新加行的默認值 ? ① datagridview? 取得或者修改當前單元格的內容: ? go to top ? 當前單元格指的是 datagridview 焦點所在的單元格,它可以通過 datagridview 對象的 currentcell 屬性取得。如果當前單元格不存在的時候,返回nothing(c#是null)
?[vb.net] ?' 取得當前單元格內容 ?console.writeline(datagridview1.currentcell.value) ?' 取得當前單元格的列 index ?console.writeline(datagridview1.currentcell.columnindex) ?' 取得當前單元格的行 index ?console.writeline(datagridview1.currentcell.rowindex) ?
[c#] ?// 取得當前單元格內容 ?console.writeline(datagridview1.currentcell.value); ?// 取得當前單元格的列 index ?console.writeline(datagridview1.currentcell.columnindex);
?// 取得當前單元格的行 index ?console.writeline(datagridview1.currentcell.rowindex); ? 另外,使用 datagridview.currentcelladdress 屬性(而不是直接訪問單元格)來確定單元格所在的行:datagridview.currentcelladdress.y 和列: datagridview.currentcelladdress.x 。這對于避免取消共享行的共享非常有用。 ? 當前的單元格可以通過設定 datagridview 對象的 currentcell 來改變。可以通過 currentcell 來設定 ?datagridview 的激活單元格。將 currentcell 設為 nothing(null) 可以取消激活的單元格。 ? [vb.net] ?' 設定 (0, 0)? 為當前單元格 ?datagridview1.currentcell = datagridview1(0, 0) ?
[c#] ?// 設定 (0, 0)? 為當前單元格 ?datagridview1.currentcell = datagridview1[0, 0]; ?在整行選中模式開啟時,你也可以通過 currentcell 來設定選定行。?????????
1 /**//// <summary> 2 /// 向下遍歷 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void button4_click(object sender, eventargs e) ... 7 { 8 int row = this.datagridview1.currentrow.index + 1; 9 if (row > this.datagridview1.rowcount - 1) 10 row = 0; 11 this.datagridview1.currentcell = this.datagridview1[0,row]; 12 } /** 13 <summary> 14 /// 向上遍歷 15 /// </summary> 16 /// <param name="sender"></param> 17 /// <param name="e"></param> 18 private void button5_click(object sender, eventargs e) ... 19 { 20 int row = this.datagridview1.currentrow.index - 1; 21 if (row < 0) 22 row = this.datagridview1.rowcount - 1; this.datagridview1.currentcell = this.datagridview1[0, row]; 23 } View Code?
?* 注意: this.datagridview 的索引器的參數是: columnindex, rowindex 或是 columnname, rowindex ?這與習慣不同。 ?
-------------------------------------------------------------------------------- ?② datagridview? 設定單元格只讀: ? go to top ? 1) 使用 readonly 屬性 ?→ 如果希望,datagridview 內所有單元格都不可編輯, 那么只要:
?[vb.net] ?' 設置 datagridview1 為只讀 ?datagridview1.readonly = true ?
[c#] ?// 設置 datagridview1 為只讀 ?datagridview1.readonly = true;此時,用戶的新增行操作和刪除行操作也被屏蔽了。 ?
如果希望,datagridview 內某個單元格不可編輯, 那么只要:
?[vb.net] ?' 設置 datagridview1 的第2列整列單元格為只讀 ?datagridview1.columns(1).readonly = true ? ' 設置 datagridview1 的第3行整行單元格為只讀 ?datagridview1.rows(2).readonly = true ? ' 設置 datagridview1 的[0,0]單元格為只讀 ?datagridview1(0, 0).readonly = true
?[c#] ?// 設置 datagridview1 的第2列整列單元格為只讀 ?datagridview1.columns[1].readonly = true; ? // 設置 datagridview1 的第3行整行單元格為只讀 ?datagridview1.rows[2].readonly = true; ? // 設置 datagridview1 的[0,0]單元格為只讀 ?datagridview1[0, 0].readonly = true; ?2) 使用 editmode 屬性 ?datagridview.editmode 屬性被設置為 datagridvieweditmode.editprogrammatically 時,用戶就不能手動編輯單元格的內容了。
但是可以通過程序,調用 datagridview.beginedit 方法,使單元格進入編輯模式進行編輯。
?[vb.net] ?datagridview1.editmode = datagridvieweditmode.editprogrammatically ?
[c#] ?datagridview1.editmode = datagridvieweditmode.editprogrammatically; ?
3) 根據條件設定單元格的不可編輯狀態 ?當一個一個的通過單元格坐標設定單元格 readonly 屬性的方法太麻煩的時候,你可以通過 cellbeginedit 事件來取消單元格的編輯。 ?[vb.net] ?'cellbeginedit 事件處理方法
?[c#] ?// cellbeginedit 事件處理方法 ?private void datagridview1_cellbeginedit(object sender, ???? datagridviewcellcanceleventargs e) ?{ ???? datagridview dgv = (datagridview)sender; ???? //是否可以進行編輯的條件檢查 ???? if (dgv.columns[e.columnindex].name == "column1" && ???????? !(bool)dgv["column2", e.rowindex].value) ???? { ???????? // 取消編輯 ???????? e.cancel = true; ???? } ?} ? -------------------------------------------------------------------------------- ?③ datagridview? 不顯示最下面的新行: ? go to top ? 通常 datagridview 的最下面一行是用戶新追加的行(行頭顯示 * )。如果不想讓用戶新追加行即不想顯示該新行,可以將 datagridview 對象的 allowusertoaddrows 屬性設置為 false。 ?[vb.net] ?' 設置用戶不能手動給 datagridview1 添加新行 ?datagridview1.allowusertoaddrows = false ?[c#] ?// 設置用戶不能手動給 datagridview1 添加新行 ?datagridview1.allowusertoaddrows = false; ?但是,可以通過程序: datagridviewrowcollection.add 為 datagridview 追加新行。 ? 補足: 如果 datagridview 的 datasource 綁定的是 dataview, 還可以通過設置 dataview.allowadd ?屬性為 false 來達到同樣的效果。 ?
-------------------------------------------------------------------------------- ?④ datagridview? 判斷新增行: ? go to top ? datagridview的allowusertoaddrows屬性為true時也就是允許用戶追加新行的場合下,datagridview的最后一行就是新追加的行(*行)。使用 datagridviewrow.isnewrow 屬性可以判斷哪一行是新追加的行。另外,通過datagridview.newrowindex 可以獲取新行的行序列號。在沒有新行的時候,newrowindex = -1。 [vb.net] ?if datagridview1.currentrow.isnewrow then ???? console.writeline("當前行為新追加行。") ?else ???? console.writeline("當前行不是新追加行。") ?end if ? -------------------------------------------------------------------------------- ?⑤ datagridview? 行的用戶刪除操作的自定義: ? go to top ? 1) 無條件的限制行刪除操作。 ?默認時,datagridview 是允許用戶進行行的刪除操作的。如果設置 datagridview對象的allowusertodeleterows屬性為 false 時, 用戶的行刪除操作就被禁止了。 ?[vb.net] ?' 禁止datagridview1的行刪除操作。 ?datagridview1.allowusertodeleterows = false ?[c#] ?// 禁止datagridview1的行刪除操作。 ?datagridview1.allowusertodeleterows = false; ?但是,通過 datagridviewrowcollection.remove 還是可以進行行的刪除。 ?補足: 如果 datagridview 綁定的是 dataview 的話,通過 dataview.allowdelete 也可以控制行的刪除。 ? 2) 行刪除時的條件判斷處理。 ?用戶在刪除行的時候,將會引發 datagridview.userdeletingrow 事件。 在這個事件里,可以判斷條件并取消刪除操作。 ?[vb.net] ?' datagridview1 的 userdeletingrow 事件 ?private sub datagridview1_userdeletingrow(byval sender as object, _ ???????? byval e as datagridviewrowcanceleventargs) _ ???????? handles datagridview1.userdeletingrow ???? '? 刪除前的用戶確認。 ???? if messagebox.show("確認要刪除該行數據嗎?", "刪除確認", _ ???????? messageboxbuttons.okcancel, messageboxicon.question) <> _ ???????????? windows.forms.dialogresult.ok then ???????? '? 如果不是 ok,則取消。 ???????? e.cancel = true ???? end if ?end sub ?[c#] ?// datagridview1 的 userdeletingrow 事件 ?private void datagridview1_userdeletingrow( ???? object sender, datagridviewrowcanceleventargs e) ?{ ???? // 刪除前的用戶確認。 ???? if (messagebox.show("確認要刪除該行數據嗎?", "刪除確認", ???????? messageboxbuttons.okcancel, ???????? messageboxicon.question) != dialogresult.ok) ???? { ???????? // 如果不是 ok,則取消。 ???????? e.cancel = true; ???? } ?} ? -------------------------------------------------------------------------------- ?⑥ datagridview? 行、列的隱藏和刪除: ? go to top ? 1) 行、列的隱藏 ?[vb.net] ?' datagridview1的第一列隱藏 ?datagridview1.columns(0).visible = false ?' datagridview1的第一行隱藏 ?datagridview1.rows(0).visible = false ?[c#] ?// datagridview1的第一列隱藏 ?datagridview1.columns[0].visible = false; ?// datagridview1的第一行隱藏 ?datagridview1.rows[0].visible = false; ?2) 行頭、列頭的隱藏 ?[vb.net] ?' 列頭隱藏 ?datagridview1.columnheadersvisible = false ?' 行頭隱藏 ?datagridview1.rowheadersvisible = false ?[c#] ?// 列頭隱藏 ?datagridview1.columnheadersvisible = false; ?// 行頭隱藏 ?datagridview1.rowheadersvisible = false; ?3) 行和列的刪除 [vb.net] ' 刪除名為"column1"的列 ?datagridview1.columns.remove("column1") ' 刪除第一列 datagridview1.columns.removeat(0) ' 刪除第一行 datagridview1.rows.removeat(0) ? [c#] ' 刪除名為"column1"的列 ?datagridview1.columns.remove("column1"); ?' 刪除第一列 datagridview1.columns.removeat(0); ?' 刪除第一行 datagridview1.rows.removeat(0); 4) 刪除選中行 ?[vb.net] ?for each r as datagridviewrow in datagridview1.selectedrows ???? if not r.isnewrow then ???????? datagridview1.rows.remove(r) ???? end if ?next ?[c#] foreach (datagridviewrow r in datagridview1.selectedrows) ?{ ???? if (!r.isnewrow) ???? { ???????? datagridview1.rows.remove(r); ???? } ?} ? -------------------------------------------------------------------------------- ?⑦ datagridview 禁止列或者行的resize: ? go to top ? 1) 禁止所有的列或者行的resize ?[vb.net] ?' 禁止用戶改變datagridview1的所有列的列寬 ?datagridview1.allowusertoresizecolumns = false ? '禁止用戶改變datagridview1の所有行的行高 ?datagridview1.allowusertoresizerows = false ?[c#] ?// 禁止用戶改變datagridview1的所有列的列寬 ?datagridview1.allowusertoresizecolumns = false; ? //禁止用戶改變datagridview1の所有行的行高 ?datagridview1.allowusertoresizerows = false; ?但是可以通過 datagridviewcolumn.width 或者 datagridviewrow.height 屬性設定列寬和行高。 ? 2) 禁止指定行或者列的resize ?[vb.net] ?'? 禁止用戶改變datagridview1的第一列的列寬 ?datagridview1.columns(0).resizable = datagridviewtristate.false ? '? 禁止用戶改變datagridview1的第一列的行寬 ?datagridview1.rows(0).resizable = datagridviewtristate.false ?[c#] ?// 禁止用戶改變datagridview1的第一列的列寬 ?datagridview1.columns[0].resizable = datagridviewtristate.false; ? // 禁止用戶改變datagridview1的第一列的行寬 ?datagridview1.rows[0].resizable = datagridviewtristate.false; ?→ 關于 noset ? 當 resizable 屬性設為 datagridviewtristate.notset 時, 實際上會默認以 datagridview 的 allowusertoresizecolumns 和? allowusertoresizerows 的屬性值進行設定。比如: datagridview.allowusertoresizecolumns = false 且 resizable 是 noset 設定時,resizable = false 。 ?
判斷 resizable 是否是繼承設定了 datagridview 的 allowusertoresizecolumns 和? allowusertoresizerows 的屬性值, 可以根據 state 屬性判斷。如果 state 屬性含有 resizableset,那么說明沒有繼承設定。 ?
3) 列寬和行高的最小值的設定 ?[vb.net] ?' 第一列的最小列寬設定為 100 ?datagridview1.columns(0).minimumwidth = 100 ? ' 第一行的最小行高設定為 50 ?datagridview1.rows(0).minimumheight = 50 ?[c#] ?// 第一列的最小列寬設定為 100 datagridview1.columns[0].minimumwidth = 100; ? // 第一行的最小行高設定為 50 ?datagridview1.rows[0].minimumheight = 50; ?4) 禁止用戶改變行頭的寬度以及列頭的高度
?[vb.net] ?'? 禁止用戶改變列頭的高度 ?datagridview1.columnheadersheightsizemode = _ ???? datagridviewcolumnheadersheightsizemode.disableresizing ? ' 禁止用戶改變行頭的寬度 ?datagridview1.rowheaderswidthsizemode = _ ???? datagridviewrowheaderswidthsizemode.enableresizing
?[c#] ?// 禁止用戶改變列頭的高度 ?datagridview1.columnheadersheightsizemode = ???? datagridviewcolumnheadersheightsizemode.disableresizing; ? // 禁止用戶改變行頭的寬度 ?datagridview1.rowheaderswidthsizemode = ???? datagridviewrowheaderswidthsizemode.enableresizing; ?
-------------------------------------------------------------------------------- ?⑧ datagridview 列寬和行高自動調整的設定: go to top ? 1) 設定行高和列寬自動調整 ?[vb.net] ?' 設定包括header和所有單元格的列寬自動調整 ?datagridview1.autosizecolumnsmode = datagridviewautosizecolumnsmode.allcells ? ' 設定包括header和所有單元格的行高自動調整 ?datagridview1.autosizerowsmode = datagridviewautosizerowsmode.allcells ?
[c#] ?// 設定包括header和所有單元格的列寬自動調整 ?datagridview1.autosizecolumnsmode = datagridviewautosizecolumnsmode.allcells; ? // 設定包括header和所有單元格的行高自動調整 ?datagridview1.autosizerowsmode = datagridviewautosizerowsmode.allcells; ?autosizecolumnsmode 屬性的設定值枚舉請參照 msdn 的 datagridviewautosizerowsmode 說明。 ?
2)指定列或行自動調整
?[vb.net] ?'? 第一列自動調整 ?datagridview1.columns(0).autosizemode = _ ???? datagridviewautosizecolumnmode.displayedcells ?
[c#] ?// 第一列自動調整 ?datagridview1.columns[0].autosizemode = ???? datagridviewautosizecolumnmode.displayedcells; ?autosizemode 設定為 notset? 時, 默認繼承的是? datagridview.autosizecolumnsmode 屬性。 ?
3) 設定列頭的高度和行頭的寬度自動調整
[vb.net] ?'? 設定列頭的寬度可以自由調整 ?datagridview1.columnheadersheightsizemode = _ ???? datagridviewcolumnheadersheightsizemode.autosize ? '? 設定行頭的寬度可以自由調整 ?datagridview1.rowheaderswidthsizemode = _ ???? datagridviewrowheaderswidthsizemode.autosizetoallheaders
?[c#] ?// 設定列頭的寬度可以自由調整 ?datagridview1.columnheadersheightsizemode = ???? datagridviewcolumnheadersheightsizemode.autosize; ? // 設定行頭的寬度可以自由調整 ?datagridview1.rowheaderswidthsizemode = ???? datagridviewrowheaderswidthsizemode.autosizetoallheaders; ?
4) 隨時自動調整 ?a, 臨時的,讓列寬自動調整,這和指定autosizecolumnsmode屬性一樣。
[vb.net] ?' 讓 datagridview1 的所有列寬自動調整一下。 ?datagridview1.autoresizecolumns(datagridviewautosizecolumnsmode.allcells) ? ' 讓 datagridview1 的第一列的列寬自動調整一下。 ?datagridview1.autoresizecolumn(0, datagridviewautosizecolumnmode.allcells) ?
[c#] ?// 讓 datagridview1 的所有列寬自動調整一下。 ?datagridview1.autoresizecolumns(datagridviewautosizecolumnsmode.allcells); ? // 讓 datagridview1 的第一列的列寬自動調整一下。 ?datagridview1.autoresizecolumn(0, datagridviewautosizecolumnmode.allcells);上面調用的 autoresizecolumns 和 autoresizecolumn 當指定的是datagridviewautosizecolumnmode.allcells 的時候, 參數可以省略。即: ?datagridview1.autoresizecolumn(0) 和 datagridview1.autoresizecolumns() ? b,臨時的,讓行高自動調整 ?[vb.net] ?' 讓 datagridview1 的所有行高自動調整一下。 ?datagridview1.autoresizerows(datagridviewautosizerowsmode.allcells) ? ' 讓 datagridview1 的第一行的行高自動調整一下。 ?datagridview1.autoresizerow(0, datagridviewautosizerowmode.allcells) ?[c#] ?// 讓 datagridview1 的所有行高自動調整一下。 ?datagridview1.autoresizerows(datagridviewautosizerowsmode.allcells); ? //讓 datagridview1 的第一行的行高自動調整一下。 ?datagridview1.autoresizerow(0, datagridviewautosizerowmode.allcells);上面調用的 autoresizerows 和 autoresizerow 當指定的是datagridviewautosizerowmode.allcells 的時候, 參數可以省略。即:datagridview1.autoresizerow (0) 和 datagridview1.autoresizerows() ? c,臨時的,讓行頭和列頭自動調整 ?[vb.net] ?' 列頭高度自動調整 ?datagridview1.autoresizecolumnheadersheight() ? ' 行頭寬度自動調整 datagridview1.autoresizerowheaderswidth( _ ???? datagridviewrowheaderswidthsizemode.autosizetoallheaders) ?[c#] ?// 列頭高度自動調整 ?datagridview1.autoresizecolumnheadersheight(); ? // 行頭寬度自動調整 ?datagridview1.autoresizerowheaderswidth( ???? datagridviewrowheaderswidthsizemode.autosizetoallheaders); ?
關于性能: ?通過 autosizecolumnsmode 或者 autosizerowsmode 屬性所指定的單元格進行自動調整時,如果調整次數過于多那么將可能導致性能下降,尤其是在行和列數比較多的情況下。在這時用 displayedcells 代替 allcells 能減少非所見的單元格的調整,從而提高性能。 ?
??⑨ datagridview 凍結列或行 go to top ? 1) 列凍結 ?datagridviewcolumn.frozen 屬性為 true 時, 該列左側的所有列被固定, 橫向滾動時固定列不隨滾動條滾動而左右移動。這對于重要列固定顯示很有用。 ? ?
[vb.net] ?' datagridview1的左側2列固定 ?datagridview1.columns(1).frozen = true ? ?
[c#] ?// datagridview1的左側2列固定 ?datagridview1.columns[1].frozen = true; ?但是,datagridview.allowusertoordercolumns = true 時,固定列不能移動到非固定列, 反之亦然。 ? 2) 行凍結 ?datagridviewrow.frozen 屬性為 true 時, 該行上面的所有行被固定, 縱向滾動時固定行不隨滾動條滾動而上下移動。 ?[vb.net] ?' datagridview1 的上3行固定 ?datagridview1.rows(2).frozen = true ?[c#] ?// datagridview1 的上3行固定 ?datagridview1.rows[2].frozen = true; ?
?⑩ datagridview 列順序的調整 ? go to top ? 設定 datagridview 的 allowusertoordercolumns 為 true 的時候, 用戶可以自由調整列的順序。 ?當用戶改變列的順序的時候,其本身的 index 不會改變,但是 displayindex 改變了。你也可以通過程序改變 displayindex 來改變列的順序。 列順序發生改變時會引發 columndisplayindexchanged 事件: ?[vb.net] ?' datagridview1的columndisplayindexchanged事件處理方法 ?private sub datagridview1_columndisplayindexchanged(byval sender as object, _ ???????? byval e as datagridviewcolumneventargs) _ ???????? handles datagridview1.columndisplayindexchanged ???? console.writeline("{0} 的位置改變到 {1} 。", _ ???????? e.column.name, e.column.displayindex) ?end sub ?[c#] ?// datagridview1的columndisplayindexchanged事件處理方法 ?private void datagridview1_columndisplayindexchanged(object sender, ???? datagridviewcolumneventargs e) ?{ ???? console.writeline("{0} 的位置改變到 {1} ", ???????? e.column.name, e.column.displayindex); ?} ? -------------------------------------------------------------------------------- ?? datagridview 行頭列頭的單元格 ? go to top ?
[vb.net] ?' datagridview1的第一列列頭內容 ?datagridview1.columns(0).headercell.value = "第一列" ? ' datagridview1的第一行行頭內容 ?datagridview1.rows(0).headercell.value = "第一行" ? ' datagridview1的左上頭部單元內容 ?datagridview1.topleftheadercell.value = "左上" ?[c#] ?// 改變datagridview1的第一列列頭內容 ?datagridview1.columns[0].headercell.value = "第一列"; ? // 改變datagridview1的第一行行頭內容 ?datagridview1.rows[0].headercell.value = "第一行"; ? // 改變datagridview1的左上頭部單元內容 ?datagridview1.topleftheadercell.value = "左上"; ?另外你也可以通過 headertext 來改變他們的內容。 ?[vb.net] ?' 改變datagridview1的第一列列頭內容 ?datagridview1.columns(0).headertext = "第一列" ?[c#] ?// 改變datagridview1的第一列列頭內容 ?datagridview1.columns[0].headertext = "第一列"; ? -------------------------------------------------------------------------------- ?? datagridview 剪切板的操作 ? go to top ?datagridview.clipboardcopymode 屬性被設定為 datagridviewclipboardcopymode.disable 以外的情況時,「ctrl + c」 按下的時候,被選擇的單元格的內容會拷貝到系統剪切板內。格式有: text, unicodetext,html, commaseparatedvalue。可以直接粘貼到 excel 內。 ? clipboardcopymode 還可以設定 header部分是否拷貝: enablealwaysincludeheadertext 拷貝header部分、enablewithoutheadertext 則不拷貝。默認是 enablewithautoheadertext , header 如果選擇了的話,就拷貝。 ? 1) 編程方式實現剪切板的拷貝 ? clipboard.setdataobject(datagridview1.getclipboardcontent()) ? 2) datagridview 的數據粘貼 ? 實現剪切板的拷貝比較容易,但是實現 datagridview 的直接粘貼就比較難了。「ctrl + v」按下進行粘貼時,datagridview 沒有提供方法,只能自己實現。 ? 以下,是粘貼時簡單的事例代碼,將拷貝數據粘貼到以選擇單元格開始的區域內。 ?[vb.net] ?' 當前單元格是否選擇的判斷 ?if datagridview1.currentcell is nothing then ???? return ?end if ?dim insertrowindex as integer = datagridview1.currentcell.rowindex ? ' 獲取剪切板的內容,并按行分割 ?dim pastetext as string = clipboard.gettext() ?if string.isnullorempty(pastetext) then ???? return ?end if ?pastetext = pastetext.replace(vbcrlf, vblf) ?pastetext = pastetext.replace(vbcr, vblf) ?pastetext.trimend(new char() {vblf}) ?dim lines as string() = pastetext.split(vblf) ? dim isheader as boolean = true ?for each line as string in lines ???? ' 是否是列頭 ???? if isheader then ???????? isheader = false ???? else ???????? ' 按 tab 分割數據 ???????? dim vals as string() = line.split(controlchars.tab) ???????? ' 判斷列數是否統一
更多詳細內容請查看:http://www.111cn.net/net/160/37258.htm
轉載于:https://www.cnblogs.com/ching2008gk/p/3339218.html
總結
以上是生活随笔為你收集整理的datagridview绑定与详细说明 (搜集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构重构改善既有代码的设计
- 下一篇: Drools规则引擎的基本使用