我无法在Gridview中更改列值

时间:2013-02-12 15:55:14

标签: c# datagridview

我正在尝试将自动编号列插入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 个答案:

答案 0 :(得分:2)

你的网格中有行吗?我看到添加了一个列的代码,以及一个为每个当前行更改字段的循环,但我没有看到添加行的代码。

您需要在循环中使用预先填充的grv.Rows.Add(...)致电DataGridViewRow

答案 1 :(得分: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>

答案 2 :(得分:0)

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

更新

请阅读您的评论,这是您的问题的好方法。 ROW_NUMBER

答案 3 :(得分:0)

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

这个rownumber很方便,我把它添加到我的技巧中;)

但是这次我做的是将我创建的数据网格列绑定到数据集中的一些随机列。当它没有绑定时,我无法写任何东西。当它被绑定时,我很容易覆盖值

    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();       
    }