GridView.Columns.Add vs GridView.Columns.Insert и GirdViewRow.FindControl - PullRequest
2 голосов
/ 22 июля 2010

Я заметил что-то странное.Поэтому я хотел бы получить объяснение того, как это работает таким образом.

У меня есть 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 для каждой строки.Затем я добавляю дополнительные столбцы из своего кода, а позже, когда пользователь нажимает кнопку, я перебираю строки, чтобы найти строки, в которых отмечен флажок, например:

        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);
        }

Я пробовал оба способа, и оба способа работают, когда я добавляю дополнительные столбцы в GridView с использованием Columns. Добавьте, например:

        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]);
        }

Но теперь я больше не могу найти флажки, используя приведенный выше код (Изменениеиндекс ячейки от 1 до 0, теперь столбец CheckBox является самым правым столбцом).Это почему?Почему столбец CheckBox должен находиться в крайнем левом углу?

Заранее большое спасибо

Ответы [ 2 ]

0 голосов
/ 08 ноября 2010

У меня нет ответа, но у меня точно такая же проблема. Я надеюсь, что Сорен ответит, если он в конце концов найдет ответ. Если нет, я надеюсь, что кто-то другой ответит решением или обходным путем.

С уважением,

Боб Аваллоне

0 голосов
/ 30 августа 2010

при вставке элемента в список - индекс всех элементов после него увеличивается на 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);
    }
...