亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

DataGridView控件顯示行號的正確代碼及分析

2020-01-24 03:11:19
字體:
來源:轉載
供稿:網友

前些天在寫個小程序,用到DataGridView,想給它動態的顯示行號。不是很費勁GOOGLE了一下,這GOOGLE不要緊,發現了不少問題。以下基本上都是GOOGLE搜索出來的網上的一些解決方法,千篇一律都是這樣的:

復制代碼 代碼如下:

private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {

            for (int i = 0; i < e.RowCount; i++)
            {
                this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString();
            }
            for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++)
            {
                this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString();
            }            
        }

private void DataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {

            for (int i = 0; i < e.RowCount; i++)
            {
                this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString();
            }
            for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++)
            {
                this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString();
            }            
        }

只要用過這段代碼的人就應該發現這段代碼是運行出錯的。原因就出在RowsRemoved事件里,會拋出一個Index outof range的異常。然而就是這么一段有錯的代碼,幾乎充斥著整個互聯網,千篇一律的COPY,沒有一個人糾正。

先說下這段代碼出錯的原因吧:
在RowsRemoved事件里,最開始生成DataGridView的數據的時候,也是會觸發這個事件的。這個時候DataGridView控件的Rows.Count就是0。那下面這行代碼就有問題了:
復制代碼 代碼如下:

this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;

e.RowIndex + i,這里對應的是Rows[0],但是Rows.Count還是0啊,Rows[0]是不存在的。要存在Rows[0]起碼DataGridView控件要有一行才行。為了避免這個錯誤,小小的修改代碼就行了:
復制代碼 代碼如下:

private void dgvKBRollUp_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            if (dgvKBRollUp.Rows.Count != 0)
            {
                for (int i = 0; i < e.RowCount; i++)
                {
                    this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString();
                }

                for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++)
                {
                    this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }

            }

只要加上一個對Rows.Count的判斷就可以避免這個錯誤。希望網上的一些COPY的朋友也要注意了,以后COPY過來的時候,自己還是要動手驗證一下。將一個錯誤的信息胡亂的傳播是對一些新手以及自己都不怎么好的。

最后附上微軟MSDN里面關于e.RowIndex和e.RowCount的一段代碼:

復制代碼 代碼如下:

System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
            messageBoxCS.AppendFormat("{0} = {1}", "RowIndex", e.RowIndex);
            messageBoxCS.AppendLine();
            messageBoxCS.AppendFormat("{0} = {1}", "RowCount", e.RowCount);
            messageBoxCS.AppendLine();
            MessageBox.Show(messageBoxCS.ToString(), "RowsRemoved Event");

通過這段代碼你可以很輕松地跟蹤事件參數里的e.RowIndex和e.RowCount的值。當然你可以DEBUG,一樣的。我就是DEBUG的O(∩_∩)O~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品男人天堂| 九九热在线精品视频| 色偷偷av亚洲男人的天堂| 国产精品久久久亚洲| 欧美日韩中文字幕在线| 亚洲成人激情在线观看| 欧美黑人一级爽快片淫片高清| 亚洲tv在线观看| 日本一区二区三区四区视频| 色偷偷av一区二区三区乱| 欧美在线视频导航| 欧美成人免费全部| 亚洲第一av网| 成人亚洲欧美一区二区三区| 欧美激情精品在线| 色一情一乱一区二区| 992tv在线成人免费观看| 粉嫩av一区二区三区免费野| 国产一区二区丝袜高跟鞋图片| 欧美国产日产韩国视频| 亚洲天堂av在线播放| 欧美日韩在线另类| 亚洲一区二区三区视频播放| 高清视频欧美一级| 国产精品久久久久久久午夜| 一区二区三区精品99久久| 日韩成人性视频| 久久亚洲欧美日韩精品专区| 91精品久久久久久久久久另类| 中文字幕国产精品久久| 欧美日韩国产激情| 午夜精品一区二区三区在线| 97国产在线视频| 色狠狠av一区二区三区香蕉蜜桃| 97在线观看免费高清| 亚洲午夜久久久影院| 欧美性猛交丰臀xxxxx网站| 最近中文字幕2019免费| 最好看的2019的中文字幕视频| 欧美www在线| 亚洲大胆美女视频| 国产精品视频xxx| 日韩精品在线观| 一本色道久久88亚洲综合88| 97在线观看免费| 国产午夜精品麻豆| 久久99久久99精品中文字幕| 日韩av网站电影| 人人做人人澡人人爽欧美| 亚洲第一页中文字幕| 欧美激情精品久久久久久蜜臀| 中日韩美女免费视频网站在线观看| 播播国产欧美激情| 国产精品h在线观看| 精品中文字幕乱| 久久久av亚洲男天堂| 91精品免费看| 亚洲第一精品自拍| 日韩欧美亚洲一二三区| 成人免费午夜电影| 精品国产91久久久| 国产欧美欧洲在线观看| 在线观看日韩专区| 国产精品久久久久久久久免费| 成人黄色影片在线| 日韩中文视频免费在线观看| 日韩欧美在线看| 欧美成在线视频| 丁香五六月婷婷久久激情| 欧美激情精品久久久| 国产成人精品在线观看| 26uuu日韩精品一区二区| 日韩一二三在线视频播| 久久久999精品| 国产99久久精品一区二区永久免费| 欧美大片在线免费观看| 欧美午夜视频一区二区| 91精品国产自产在线| 97精品国产91久久久久久| 国模视频一区二区三区| 久久不射热爱视频精品| 欧美成人合集magnet| 亚洲免费电影一区| 一本一本久久a久久精品牛牛影视| 久久久在线免费观看| 久久视频在线免费观看| 欧美肥婆姓交大片| 久久视频在线视频| 久久久综合免费视频| 中文字幕精品一区久久久久| 久久精品小视频| 成人国产精品久久久久久亚洲| 久久久噜噜噜久久中文字免| 欧美午夜精品久久久久久久| 亚洲国产精品资源| 日韩一区二区福利| 国产免费一区二区三区香蕉精| 国产拍精品一二三| 色天天综合狠狠色| 奇米一区二区三区四区久久| 欧美亚洲国产成人精品| 日韩欧美aⅴ综合网站发布| 亚洲精品永久免费精品| 蜜臀久久99精品久久久久久宅男| 国产精品日日摸夜夜添夜夜av| 国产精品看片资源| 黑人巨大精品欧美一区二区三区| 欧美黑人xxxx| 在线观看欧美www| 日韩成人av网址| 日韩美女视频免费看| 日韩免费观看高清| 最近中文字幕mv在线一区二区三区四区| 久久亚洲一区二区三区四区五区高| 国产在线999| 国产精自产拍久久久久久蜜| 国产精品视频在线播放| 国产一区二区在线播放| 久久99精品久久久久久噜噜| 精品少妇v888av| 欧美激情免费在线| 日韩在线中文字幕| 日韩精品免费在线视频| 成人观看高清在线观看免费| 2019最新中文字幕| 欧美天堂在线观看| 日韩精品亚洲元码| 国产91精品久久久久| 久久久久久久久久久网站| 91免费视频国产| 久久久人成影片一区二区三区| 欧美激情免费观看| 黄色一区二区在线观看| 亚洲欧美成人精品| 日本精品一区二区三区在线播放视频| 亚洲视屏在线播放| 91最新在线免费观看| 欧美色图在线视频| 欧美日韩国产影院| 国产精品96久久久久久| 日韩欧亚中文在线| 欧美日韩国产色视频| 两个人的视频www国产精品| 高清欧美一区二区三区| 日韩hd视频在线观看| 亚洲片av在线| 亚洲国产小视频在线观看| 91精品国产一区| 亚洲精品国产精品自产a区红杏吧| 色99之美女主播在线视频| 久久久99免费视频| 精品成人69xx.xyz| 欧美老女人www| 久久这里只有精品视频首页| 午夜精品蜜臀一区二区三区免费| 欧美日韩不卡合集视频| 日韩av在线天堂网| 国产精品成熟老女人| 亚洲黄一区二区| x99av成人免费| 操人视频在线观看欧美| 久久精品国产久精国产思思| 精品激情国产视频| 亚洲一区二区三区在线免费观看|