我注意到一些我觉得很奇怪的事情。因此,我想解释一下它是如何以这种方式工作的。
我有一个 GridView,像这样:
<asp:GridView ID="_grdFordelinger" runat="server" CssClass="grid" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
Vælg
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="FordelingCheckBox" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
如您所见,此时我只定义了一个列,并且该列包含每一行的 CheckBox。然后,我从后面的代码中添加更多列,稍后,当用户单击按钮时,我遍历行以查找 CheckBox 已被选中的行,例如:
foreach (GridViewRow row in _fordelingsSelector.Rows)
{
foreach (TableCell cell in row.Cells)
{
foreach (Control control in cell.Controls)
{
if(control is CheckBox)
Trace.Write("I FOUND A CHECKBOX!!!");
}
}
}
或者:
foreach (GridViewRow row in _fordelingsSelector.Rows)
{
var checkBox = (CheckBox) row.FindControl("FordelingCheckBox");
if (checkBox.Checked)
Trace.Write("I will now delete fordeling with id: " + row.Cells[1].Text);
}
我已经尝试了两种方法,当我使用 Columns.Add 将附加列添加到 GridView 时,两种方法都有效,例如:
foreach (var boundField in boundFields)
{
_grdFordelinger.Columns.Add(boundField);
}
但我希望 CheckBox 列是最右边的列,所以我认为使用 Columns.Insert 添加列不会有什么不同,例如:
for (int i = 0; i < boundFields.Count; i++)
{
_grdFordelinger.Columns.Insert(i, boundFields[i]);
}
但现在我无法再使用上面的代码找到 CheckBox(将单元格索引从 1 更改为 0,因为 CheckBox 列是最右边的列)。这是为什么?为什么 CheckBox 列必须在最左边?
非常感谢提前