Gridview、自动生成的列、复选框列可编辑
Gridview, Autogenerated Column, Checkbox Column Editable
我有一个绑定到数据源的网格视图。
<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" 属性。我只想:
- 能够check/uncheck复选框(我卡在这里了)
- 使用外部按钮执行单个更新
- 其他列必须是只读的
自动生成的列几乎无法直接操作,因此没有简单的方法可以做到。所以你可以做的是创建一个自定义列,它总是在任何自动生成的列之前出现(同样,这个行为不能改变),并隐藏自动生成的位列。
描述了如何隐藏该列here。本质上你不能使用 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 列。
我有一个绑定到数据源的网格视图。
<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" 属性。我只想:
- 能够check/uncheck复选框(我卡在这里了)
- 使用外部按钮执行单个更新
- 其他列必须是只读的
自动生成的列几乎无法直接操作,因此没有简单的方法可以做到。所以你可以做的是创建一个自定义列,它总是在任何自动生成的列之前出现(同样,这个行为不能改变),并隐藏自动生成的位列。
描述了如何隐藏该列here。本质上你不能使用 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 列。