我想在列表中保存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
答案 0 :(得分:2)
您应该检查您的gridview是否有任何选定的行。除此之外,您的代码还有其他问题:
Rows.Count - 1
。 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);
}
答案 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的答案,因为这是正确的。