Я заметил кое-что, что я нахожу странным. Поэтому я хотел бы получить объяснение того, как это работает таким образом.
У меня есть 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!!!");
}
}
}
Or:
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);
}
Я пробовал оба способа, и оба они работают, когда я добавляю дополнительные столбцы в GridView с помощью Columns.Add, например:
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]);
}
Но теперь я больше не могу найти CheckBoxes, используя приведенный выше код (изменение индекса ячейки с 1 на 0 теперь, когда столбец CheckBox является самым правым столбцом). Почему это? Почему столбец CheckBox должен быть крайним слева?
Заранее большое спасибо