0

我想将 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

4

3 回答 3

2

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

  1. 循环应从 0 开始并应以 继续Rows.Count - 1
  2. 您应该在 for 循环中进行实例化budgetCommesa,否则您最终会得到一个对象列表,它们都指向相同的值。

所以你的代码应该是这样的:

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);
 }
于 2013-01-15T09:11:41.670 回答
2

试试这个 :

    budgetCommessa.Task = preventivoView.Rows[i].Cells[0].Text;

希望这有帮助。

于 2013-01-15T09:17:36.850 回答
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 的答案,因为这是正确的。

于 2013-01-15T09:30:11.350 回答