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>

ご覧のとおり、この時点で定義されている列は 1 つだけで、その列には各行の 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]);
        }

しかし、今では上記のコードを使用して CheckBoxes を見つけることができません (CheckBox 列が右端の列であるため、セル インデックスを 1 から 0 に変更します)。何故ですか?CheckBox 列を左端に配置する必要があるのはなぜですか?

事前にどうもありがとう

4

2 に答える 2

0

答えはありませんが、まったく同じ問題があります。ソレンが最終的に答えを見つけたら返事をくれることを願っています。そうでない場合は、他の誰かが解決策または回避策で応答することを望んでいます。

よろしく、

ボブ・アバロン

于 2010-11-08T20:43:17.560 に答える
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 に答える