2012-01-07 67 views
2

如何爲datagridView的行編號?當我添加額外的行數增量?如何對DataGridView的行進行編號?

+1

這是DataGridView是有界還是無界?你如何填充datagridview?通過數據表或列表? – adatapost 2012-01-07 10:43:55

+0

使用DataTable – user891757 2012-01-07 10:46:43

+2

我永遠不會明白人們爲什麼可以互換地使用'DataGrid'和'DataGridView'。 **他們是兩個不同的控件。** – 2012-01-07 12:42:18

回答

1

添加一列標題爲「數字」的網格(如第一列),並把這個代碼在其OnRowAdded事件:

this.DataGridView1.Rows[e.RowIndex].Cells[0].Value = this.DataGridView1.Rows.Count; 

您必須手動填寫你的網格,不與它 編輯:這可以在綁定列表上工作,只要你先綁定它然後構建列表。

+0

當我點擊數字消失的行! – user891757 2012-01-07 14:09:41

+0

點擊?!!方式?把你完整的方法在這裏 – 2012-01-07 14:12:38

+0

相同,你寫什麼 – user891757 2012-01-07 17:34:12

3
//You can also use below code 

this.DataGridView1.Rows[e.RowIndex].Cell[0].value =e.RowIndex + 1; 

//獲取行

this.DataGridView1.Rows.Count; 
3

總數您應該添加AutoIncrement列到DataTable。我推測你有一個dataTable的實例DataTable

//your code that populates the dataTable 

DataColumn col1 = new DataColumn(); 
col1.ColumnName = "SrNo"; 
col1.AutoIncrement = true; 
col1.AutoIncrementSeed = 1; 
col1.AutoIncrementStep = 1; 

dataTable.Columns.Add(col1); 

for(int i=0;i<dataTable.Rows.Count;i++) 
    { 
    dataTable.Rows[i]["SrNo"] = i + 1; 
    } 
dataGridView1.DataSource = dataTable; 
1

Ali Foroughi有正確的想法,我稍微修改了他的答案,使用databound gridview以及一個手動構建。

將此添加到行添加事件 每次添加行時添加1行或多行。 e.rowindex是第一行,e.rowcount是添加的行的總數。

private void dgv1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
    { 
     for (int i=0;i<e.RowCount;i++) 
     this.dgv1.Rows[e.RowIndex + i].Cells[0].Value = (e.RowIndex +i).ToString(); 
    } 

注:這假定第一列是你的行號列,改變細胞[0]到細胞[N]取其列你必須爲你的行號列,其中n =

9

相反使用的datagridview的RowPostPaint事件

void GridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) 
{ 
    this.GridView.Rows[e.RowIndex].Cells[0].Value 
    = (e.RowIndex + 1).ToString(); 
} 
+0

謝謝!有用! – Arbaaz 2013-10-30 04:43:34

4

我所做的一個的onPageLoad我加載到數據源的GridView後,設置在RowHeaderCell的值用一個簡單的循環:

for (int i = 0; i < SensorGridView.Rows.Count; i++) 
{ 
    DataGridViewRowHeaderCell cell = SensorGridView.Rows[i].HeaderCell; 
    cell.Value = (i + 1).ToString(); 
     SensorGridView.Rows[i].HeaderCell = cell; 
} 

我tryed的上述sugestion用了兩個OnRowPostPaint和OnCellPostPaint環路他們產生基於flikering行號

乾杯

0

什麼,我在這裏學到,然後進行一些實驗,這裏是什麼在VB中爲我工作。當記錄被添加或刪除時它重新編號行。

Private Sub NumberGridViewRows() Handles DataGridView1.RowsAdded, DataGridView1.RowsRemoved 
    Dim row As DataGridViewRow 
    For Each row In DataGridView1.Rows 
     row.HeaderCell.Value = (row.Index + 1).ToString 
    Next 
End Sub 
0
  1. 添加<asp:Label ID="rowNumber" runat="server" /> in <ItemTemplate>
  2. 然後添加OnRowDataBound = 「gridEditorDocs_RowDataBound」 到你的GridView定義
  3. 然後添加處理程序:

    protected void gridEditorDocs_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
        if (e.Row.RowIndex >= 0) 
        { 
         Label rowNumber = e.Row.FindControl("rowNumber") as Label; 
         if (rowNumber != null) 
          rowNumber.Text = string.Format("{0}.", e.Row.RowIndex + 1); 
        } 
    } 
    
+0

如果我沒有弄錯,問題是要求DataGridView的幫助,我相信這在ASP中不可用。儘管這可能對GridView很好。 – Death259 2014-03-19 15:17:17

1

到您的網格添加列與標題'行數'並將其轉換爲模板字段

評估和演示的rowIndex號並將其轉換爲整數,並添加一個..

,或者如果你想使用RowPostPaint事件下面的代碼複製你的DataGrid

   <asp:TemplateField HeaderText="Row Num">  
        <ItemTemplate> 
         <asp:Label ID="lblRowNum" runat="server" Text='<%# Convert.ToInt32(DataBinder.Eval(Container, "RowIndex"))+1 %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
1

內爲Malik Niaz曾建議你可能會最好將發件人轉換爲DataGridView。這樣您就可以將代碼複製並粘貼到任何RowPostPaint事件中,並且無需修改即可使用它。

((DataGridView)sender).Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString(); 

儘管使用RowPostPaint事件,但我發現它會產生一些圖形問題。對於初學者來說,行號會閃爍,滾動條會消失。如果您正在手動加載DataGridView,而不是將其綁定到數據源,那麼您應該可以使用RowsAdded事件。然後您可以使用與上面完全相同的代碼。

那些綁定DataGridView的替代方法是創建一個方法來遍歷併爲每一行編號。

private void numberMyGrid(DataGridView dgv) 
{ 
    foreach (DataGridViewRow row in dgv.Rows) 
    { 
     row.HeaderCell.Value = (row.Index + 1).ToString(); 
    } 
} 

然後可以在將數據加載到DataGridView中後調用它。

0

如果您想要在行標題中看到行#(即不在網格中),請確保使用Rows []的HeaderCell屬性,如下所示。這處理datagridview的RowPostPaint事件。

private void dgvUserAct_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) 
{ 
    this.dgvUserAct.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString(); 
} 
2

這些解決方案大多數適用於初始添加行號。 但是,如果將行號添加到行標題,然後重新排列列,則它們全部消失。所以,你應該做的是使用DataGridViewBindingCompleteEventHandler添加行號每當 數據綁定改變

public partial class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 

     this.dGV.DataBindingComplete += 
      new DataGridViewBindingCompleteEventHandler(this.DataBindingComplete); 
    } 

    // ... 

    private void DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     // Loops through each row in the DataGridView, and adds the 
     // row number to the header 
     foreach (DataGridViewRow dGVRow in this.dGV.Rows) 
     { 
      dGVRow.HeaderCell.Value = String.Format("{0}", dGVRow.Index + 1); 
     } 

     // This resizes the width of the row headers to fit the numbers 
     this.dGV.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); 
    } 
} 

有了這個代碼,當你添加行,刪除行,列重新排序等,行號會依然存在。

0

更簡單的方法是在預繪製中設置行標題值。然後您需要確定它們尚未設置在未來的塗料上,因爲設置該值會導致其他塗料。這段代碼爲我工作,並不會導致連續的油漆。即使排序添加或刪除行,這也會使行正確編號(1..nn)。適用於綁定。

private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) 
    { 
     String hdrNum = String.Format("{0}", e.RowIndex + 1); 

     if (dgvResults.Rows[e.RowIndex].HeaderCell.Value == null || hdrNum != dgvResults.Rows[e.RowIndex].HeaderCell.Value.ToString()) 
     { 
      dgvResults.Rows[e.RowIndex].HeaderCell.Value = hdrNum; 
     } 
    } 
相關問題