2012-07-15 35 views
2

我有一個DataGridView並將其綁定到數據庫。在DataGridView中自動構建號碼

我用下面的代碼在DataGridView自動創建一個行號:

dgv.Rows[e.RowIndex].Cells[0].Value = e.RowIndex +1; 

,但結果並不確定。請幫我建立這個號碼。

UPDATE: 結果:

1  ssss  mmmm 
2  tttt  tttt 
     rrrrr  rrrr 
     tttttt tttt 
.... 

所以最後兩行不顯示號碼。

+0

薩拉姆。 WindowsForms或Asp.NET? – Ria 2012-07-15 06:37:32

+0

WindowsForms ... – 2012-07-15 06:39:12

+0

看來你的方法是最簡單的方法,並正常工作 – Ria 2012-07-15 06:49:47

回答

0

可以表明,在標題單元格..

DataGridView gridView = sender as DataGridView; 

    if (null != gridView) 
    { 
     foreach (DataGridViewRow r in gridView.Rows) 
     { 
      gridView.Rows[r.Index].HeaderCell.Value = (r.Index + 1).ToString(); 
     } 
    } 
2

RowsAdded事件將不會對這項工作 - 嘗試加入一些調試輸出到您的事件處理程序,你會看到該事件的套發射行,而不是單行,這就是爲什麼你只能得到前兩個值填充。

一個更好的地方是在DataBindingCompleteDefaultValuesNeeded事件。

DataBindingComplete將填寫第一次加載的所有值,然後DefaultValuesNeeded將填充每一個新行。

DataBindingComplete:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow r in dataGridView1.Rows) 
    { 
     r.Cells["AutoGenColumn"].Value = r.Index + 1; 
    } 
} 

DefaultValuesNeeded:

void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) 
{ 
    dataGridView1.Rows[e.Row.Index].Cells["AutoGenColumn"].Value = e.Row.Index + 1; 
} 

這個要求似乎有點不尋常 - 你不解釋爲什麼你需要這個號碼,但你可能想看看將該行添加到底層數據集中(例如,使用DataTable很容易),或者像Subek建議的那樣將其放入行標題中。需要注意的


最後一兩件事 - 這種自動生成的列通常最好在CellValidating事件完成,例如,當您和您概括另外兩列,一列。這不起作用,因爲你的專欄不是基於其他專欄,但值得一提的是一般的路線。

-1

我相信這是最簡單的,工程100%對我來說

<asp:TemplateField HeaderText="Sl. No."> 
    <ItemTemplate> 
     <%# Container.DataItemIndex + 1 %> 
    </ItemTemplate> 
</asp:TemplateField> 

enter image description here

+0

它的作品好友,如果你在尋找別的東西,讓我知道 – 2016-02-29 06:27:36