C#的DataGridView中自動在行首新增行號

快樂生活2009發表於2015-07-14

【問題】

已經可以自動向DataGridView新增資料,增加新行了。

但是想要給每行的行首,自動新增上對應的行號。

【解決過程】

1.參考:

Show row number in row header of a DataGridView

去試試:

初始化:

dgvSearchResult.CurrentRow.HeaderCell.Value = String.Format("{0}", dgvSearchResult.CurrentRow.Index + 1);

每次更新時:

            dgvSearchResult.Rows.Add(
                singleGigInfo.title,
                singleGigInfo.sellerRating,
                singleGigInfo.estimatedDelivery,
                singleGigInfo.gigRating,
                singleGigInfo.ordersInQueue,
                singleGigInfo.sellerLevel,
                singleGigInfo.hasVideo,
                singleGigInfo.isExpressGig,
                singleGigInfo.coutryFlag,
                singleGigInfo.positiveReviews,
                singleGigInfo.negativeReviews,
                singleGigInfo.isTopRatedSeller,
                singleGigInfo.gigUrl);

            dgvSearchResult.Rows[dgvSearchResult.Rows.Count - 1].Selected = true;
            dgvSearchResult.FirstDisplayedScrollingRowIndex = dgvSearchResult.Rows.Count - 1;

            dgvSearchResult.Rows[dgvSearchResult.Rows.Count - 1].HeaderCell.Value = String.Format("{0}", dgvSearchResult.Rows[dgvSearchResult.Rows.Count - 1].Index + 1);

看看如何。

結果是可以顯示出行號的,但是下次更新時,又消失了:

only show the lastest row number

2.參考:

How to number the rows of DataGridView?

去專門看了看:

RowPostPaint事件

RowPostPaint event

所以雙擊該事件,再去新增程式碼:

        private void dgvSearchResult_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            dgvSearchResult.Rows[dgvSearchResult.Rows.Count - 1].HeaderCell.Value = String.Format("{0}", dgvSearchResult.Rows[dgvSearchResult.Rows.Count - 1].Index + 1);
        }

試試效果。

結果卻始終重新整理行號1:

always refresh row number to 1

3.再去參考:

auto generate row number to datagridview in windows application

乾脆手動畫每個行的行號吧:

            for (int count = 0; (count <= (dgvSearchResult.Rows.Count - 2)); count++)
            {
                dgvSearchResult.Rows[count].HeaderCell.Value = String.Format("{0}", count + 1);
                //dgvSearchResult.Rows[count].HeaderCell.Value = string.Format((count + 1).ToString(), "0");
            }

然後就可以了:

can show row number below 10

above 10 also can show for wider width

 

注意:

其中預設顯示寬度不夠寬,導致超過10以上的,都看到的只是整數部分:

above 10 not show completely

需要自己手動拉寬顯示寬度,即可。。。。

這點,還是很假,很悲催的。。。

剛才讓我誤以為string的format有問題,只能顯示一位呢。。。

 

【總結】

還是沒有系統自動支援去顯示行號的。。。

還是需要在新增新行後,手動去畫每個HeaderCell才可以的。

轉自:http://www.crifan.com/csharp_datagridview_auto_add_line_number_on_row_head/

相關文章