如何对datagridView的行进行编号?当我添加额外的行时,数字会递增?
答案 0 :(得分:9)
而是使用datagridview的RowPostPaint事件
void GridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
this.GridView.Rows[e.RowIndex].Cells[0].Value
= (e.RowIndex + 1).ToString();
}
答案 1 :(得分:5)
在将我的数据源加载到gridview之后,我在OnPageLoad中所做的是使用一个简单的循环在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;
}
我在OnRowPostPaint和OnCellPostPaint的循环中尝试了上面的消化,它们产生了错误的行号
干杯
答案 2 :(得分:3)
//You can also use below code
this.DataGridView1.Rows[e.RowIndex].Cell[0].value =e.RowIndex + 1;
//获取总行数
this.DataGridView1.Rows.Count;
答案 3 :(得分: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;
答案 4 :(得分: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);
}
}
使用此代码,当您添加行,删除行,重新排序列等时,行号将保留。
答案 5 :(得分:1)
在网格中添加一个标题为“Number”的列(作为第一列),并将此代码放入其OnRowAdded事件中:
this.DataGridView1.Rows[e.RowIndex].Cells[0].Value = this.DataGridView1.Rows.Count;
您必须手动填充网格,不要绑定它 编辑:这适用于绑定列表,只要先绑定它然后构造列表。
答案 6 :(得分:1)
Ali Foroughi有正确的想法,我稍微修改了他的回答,使用数据绑定gridview以及一个手动构建。
将此添加到RowsAdded事件 每次添加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 =您的行号列中的任何一列
答案 7 :(得分:1)
在网格中添加标题为“行号”的列,并将其转换为模板字段
Eval RowIndex数字并将其转换为整数并添加一个..
或复制数据网格内的代码
<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>
答案 8 :(得分:1)
如果您想使用RowPostPaint事件,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中加载数据后调用它。
答案 9 :(得分: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
答案 10 :(得分:0)
<asp:Label ID="rowNumber" runat="server" /> in <ItemTemplate>
然后添加处理程序:
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);
}
}
答案 11 :(得分:0)
如果要查看行标题中的行#(即不在网格中),请确保使用Rows []的HeaderCell属性,如下所示。这将处理datagridview的RowPostPaint事件。
private void dgvUserAct_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
this.dgvUserAct.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
}
答案 12 :(得分: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;
}
}