Gridview, автоматически сгенерированный столбец, флажок редактируемый столбец

У меня есть сетка, привязанная к источнику данных.

 <asp:GridView ID="DocumentReviewGrid" runat="server" AllowPaging="True" AllowSorting="True"
                    EnableModelValidation="True" Width="100%" BorderStyle="None" 
                    CssClass="docnav_data" BorderWidth="1px" GridLines="None" DataSourceID="DocumentReviewDataSource"
                    HorizontalAlign="Left" OnRowDataBound="DocumentReviewGrid_RowDataBound" 
                    OnRowCreated="DocumentReviewGrid_RowCreated" CellSpacing="5"
                    PageSize="20" OnPageIndexChanged="DocumentReviewGrid_PageIndexChanged">
                    <AlternatingRowStyle BackColor="#EBF2F9" BorderStyle="None" />
                    <FooterStyle HorizontalAlign="Left" />
                    <HeaderStyle BackColor="#E7E7E7" HorizontalAlign="Left" />
                    <PagerSettings Mode="NumericFirstLast" Position="Top" PageButtonCount="4" />
                    <PagerStyle HorizontalAlign="Center" />                       
                </asp:GridView>

Как видите, для Autogenerated Column установлено значение true, и оно должно быть таким же. Один из столбцов является битовым значением SQL, поэтому он представлен в виде флажка. Я хотел бы иметь возможность редактировать только столбец флажок, без использования свойства "AutoGenerateEditButton". Я просто хотел бы:

  • быть в состоянии проверить / снять флажок (я застрял здесь)
  • выполнение одного обновления с помощью внешней кнопки
  • остальные столбцы должны быть только для чтения

1 ответ

Решение

В любом случае, автоматически сгенерированными столбцами нельзя напрямую манипулировать, поэтому простого способа сделать это не существует. Поэтому вы можете создать собственный столбец, который всегда будет первым перед автоматически сгенерированными столбцами (опять же, это поведение нельзя изменить) и скрыть автоматически сгенерированный битовый столбец.

Как скрыть колонку описано здесь. По сути, вы не можете использовать коллекцию Columns, поэтому нужно сделать это:

protected void DocumentReviewGrid_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[X].Visible = false; // hides the first column
}

Вот X основанный на 0 индекс столбца, который нужно скрыть.

А теперь, чтобы добавить столбец, определите его так, как вы хотите, оставив AutoGenerateColumns="true":

<asp:GridView ID="DocumentReviewGrid"...>
    <Columns>
        <asp:CheckBoxField HeaderText="Esclusione" DataField="Esclusione" />
    </Columns>
</asp:GridView>

По общему признанию это довольно хакерский, но это приведет вас почти туда, куда вы хотите - столбец bool отображается и редактируется.

Другие вопросы по тегам