2

我正在尝试将自动编号列插入 C# 中的 datagridview 控件。

一切正常,但我无法在专栏中写任何东西。它仍然是空的。

我怎样才能解决这个问题?

下面是我的代码(grv - gridview,ds-dataset):

        grv1.AutoGenerateColumns = false;
        grv1.DataSource = ds.Tables[0];        
        grv1.Columns[0].DataPropertyName = "LastName";


        DataGridViewTextBoxColumn nrCol = new DataGridViewTextBoxColumn();
        nrCol.Name = "Nr";
        nrCol.HeaderText = "Nr";
        grv.Columns.Insert(0, nrCol);
        grv.Columns[0].ReadOnly = false;


        for (int i=0;i<grv.Rows.Count;i++)
        {
            grv.Rows[i].Cells[0].Value = i.ToString();       
        }
4

4 回答 4

2

Do you have rows in your grid? I see code that adds a column, and a loop that changes the field for every present row, but I don't see code that adds rows.

You need to call grv.Rows.Add(...) with a pre-filled DataGridViewRow within your loop.

于 2013-02-12T16:01:51.257 回答
1

我认为您需要在绑定数据源之后find the controlassign the value to the Text property of TextBox control 而不是单元格);单元格值可能不可见,因为 TextBox 正在覆盖它...

//your code here
...
//assign data source (if you have any)
grv.DataSource = YourDataSource;
//bind the gridview
grv.DataBind();

//now you can loop through the gridview as below
for (int i=0;i<grv.Rows.Count;i++)
{
    TextBox txt = (TextBox)grv.Rows[i].FindControl("Nr");
    txt.Text = i.ToString();
}

或者你可以像下面这样巧妙地做到这一点;

后面的代码:

//define index variable in the code behind
protected int index = 1;

HTML:

<!--Add this column to the GridView with your text box -->
<asp:TemplateField>
   <ItemTemplate>
       <asp:TextBox runat="server" ID="Nr" text='<%# index ++ %>'></asp:TextBox>
   </ItemTemplate>
</asp:TemplateField>
于 2013-02-12T16:04:26.073 回答
0

谢谢大家,我自己解决了这个问题,有点脏。

这个行号很方便,我将它添加到我的技巧中;)

但是这次我所做的是将我创建的数据网格列绑定到数据集中的一些随机列。当它解开时,我什么也写不出来。当它被绑定时,我很容易覆盖了这些值

    grv1.AutoGenerateColumns = false;
    grv1.DataSource = ds.Tables[0];        
    grv1.Columns[0].DataPropertyName = "LastName";


    DataGridViewTextBoxColumn nrCol = new DataGridViewTextBoxColumn();
    nrCol.Name = "Nr";
    nrCol.HeaderText = "Nr";
    grv1.Columns.Insert(0, nrCol);
    grv1.Columns[0].ReadOnly = false;

    //!!!!!!!!!!!!!!!!!!!!!!
    grv1.Columns[0].DataPropertyName = "Postal code"; //or whatever existing column 


    for (int i=0;i<grv.Rows.Count;i++)
    {
        grv.Rows[i].Cells[0].Value = i.ToString();       
    }
于 2013-02-13T10:31:44.273 回答
0

如果我是正确的,你有 Person Table 或类似的东西。您不需要以autonumber这种方式为该表创建一个,只需从您的数据库中设置该表的primary keyandauto-increment = true并完成。

更新

只需阅读您的评论,这是解决您问题的好方法。ROW_NUMBER 行

于 2013-02-12T22:34:48.023 回答