将GridView单元格值保存在列表中

时间:2013-01-15 09:08:04

标签: c# asp.net gridview null nullreferenceexception

我想在列表中保存GridView单元格,将其与另一个列表进行比较。

这就是我的尝试:

        BudgetCommessa budgetCommessa = new BudgetCommessa();
        List<BudgetCommessa> listaDaGridView = new List<BudgetCommessa>();
        for (int i = 1; i <= preventivoView.Rows.Count; i++)
        {
            budgetCommessa.Task = Convert.ToString(preventivoView.SelectedRow.Cells[0].Text);//SelectedDataKey.Values[0]);
            listaDaGridView.Add(budgetCommessa);
        }

但即使填充了GridView的单元格(0,0),我也会得到NullReferenceException

3 个答案:

答案 0 :(得分:2)

您应该检查您的gridview是否有任何选定的行。除此之外,您的代码还有其他问题:

  1. 循环应从0开始,并应继续Rows.Count - 1
  2. 您应该在for循环中实例化budgetCommesa,否则最终会得到一个指向同一个值的对象列表。
  3. 所以你的代码应该是:

    for (int i = 0; i < preventivoView.Rows.Count; i++)
     {
            if(preventivoView.SelectedRow != null)
                {            
                BudgetCommessa budgetCommessa = new BudgetCommessa();
                budgetCommessa.Task = Convert.ToString(preventivoView.SelectedRow.Cells[0].Text);//SelectedDataKey.Values[0]);
                listaDaGridView.Add(budgetCommessa);
                }
     }
    

    如果您希望从所有行的单元格中获取值,无论选择哪一行,您都必须迭代每一行,而不是SelectedRow

    for (int i = 0; i < preventivoView.Rows.Count; i++)
     {
        BudgetCommessa budgetCommessa = new BudgetCommessa();
        budgetCommessa.Task = Convert.ToString(preventivoView.Rows[i].Cells[0].Text);//SelectedDataKey.Values[0]);
        listaDaGridView.Add(budgetCommessa);
     }
    

答案 1 :(得分:2)

试试这个:

    budgetCommessa.Task = preventivoView.Rows[i].Cells[0].Text;
希望这有帮助。

答案 2 :(得分:0)

如果要使用选定的行,则需要在网格中使用按钮字段。

<asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanged="SelectedRow_changed">
    <Columns>
        <asp:ButtonField ButtonType="Button" CommandName="Select" HeaderText="Select Row"
            Text="Select" />
    </Columns>
</asp:GridView>

然后更改所选行的事件。

public void SelectedRow_Changed(object sender, GridViewSelectEventArgs e)
{
  GridViewRow row = CustomersGridView.Rows[e.NewSelectedIndex];
  BudgetCommessa budgetCommessa = new BudgetCommessa();
  //Would of shifted one because of the new button column
  budgetCommessa.Task = Convert.ToString(row.Cells[1].Text);
}

如果你想引用每一行并迭代它们,请使用Habib的答案,因为这是正确的。