2

我注意到一些我觉得很奇怪的事情。因此,我想解释一下它是如何以这种方式工作的。

我有一个 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 列必须在最左边?

非常感谢提前

4

2 回答 2

0

当您将项目插入列表时 - 它会将所有项目的索引推到 1

你应该做类似的事情:

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[row.Cells.Count-1].Text);
    }
于 2010-08-30T08:20:30.887 回答
0

我没有答案,但我有完全相同的问题。如果索伦最终找到答案,我希望他能回复。如果不是,我希望其他人会提供解决方案或解决方法。

问候,

鲍勃·阿瓦隆

于 2010-11-08T20:43:17.560 回答