ASP.NET Web Forms中为GridView添加复选框列出现类型转换错误如何解决?
解决ASP.NET Web Forms GridView添加复选框列的类型转换错误
错误原因
你误用了Windows Forms框架的DataGridViewCheckBoxColumn控件,ASP.NET Web Forms的GridView属于Web控件体系,只能添加System.Web.UI.WebControls命名空间下的列类型(比如CheckBoxField、TemplateField),两者分属不同技术栈,因此出现类型转换错误。
解决方法
方法1:使用CheckBoxField(快速实现)
替换动态添加列的代码,改用Web Forms专属的CheckBoxField:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridViewSearch.DataSource = GetDataForSearch(); // 创建Web Forms的复选框列 CheckBoxField checkColumn = new CheckBoxField(); checkColumn.HeaderText = "X"; checkColumn.ItemStyle.Width = Unit.Pixel(50); GridViewSearch.Columns.Add(checkColumn); GridViewSearch.DataBind(); } }
方法2:使用TemplateField(灵活自定义)
如果需要对复选框的样式、绑定逻辑做更多控制,推荐在前台ASPX中声明TemplateField,同时关闭自动生成列避免重复:
<asp:GridView ID="GridViewSearch" runat="server" AutoGenerateColumns="false"> <Columns> <!-- 手动绑定查询返回的字段 --> <asp:BoundField DataField="EntredDatetime" HeaderText="EntredDatetime" /> <asp:BoundField DataField="OrderType" HeaderText="OrderType" /> <asp:BoundField DataField="Printer_name" HeaderText="Printer_name" /> <asp:BoundField DataField="BranchCode" HeaderText="BranchCode" /> <asp:BoundField DataField="id" HeaderText="ID" /> <!-- 自定义复选框列 --> <asp:TemplateField HeaderText="X"> <ItemTemplate> <asp:CheckBox ID="chkSelect" runat="server" /> </ItemTemplate> <ItemStyle Width="50px" /> </asp:TemplateField> </Columns> </asp:GridView>
后台代码保持原有的数据绑定逻辑即可,无需动态添加列:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridViewSearch.DataSource = GetDataForSearch(); GridViewSearch.DataBind(); } }
内容的提问来源于stack exchange,提问作者ahmed abdelaziz
相关产品推荐
相关产品推荐

