在DetailsView错误中选择所有复选框按钮 [英] Select All checkboxes button in DetailsView errors

查看:129
本文介绍了在DetailsView错误中选择所有复选框按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

注意:我已经更新了这个问题的代码,以便让示例更清晰一些,并利用下面的Karl Anderson提供的示例代码。我也愿意以其他方式获得我需要完成的工作。



我正在创建一个表单包括多个复选框,这些复选框可能会或可能不会被用于每个请求。我试图在DetailsView网格中的这些复选框下方创建一个按钮,只有在需要检查它们时才会检查(相对于将检查和取消选中的按钮)框。正如您从下面的代码可以看到的那样,复选框周围有多个文本框/ BoundField,它们包含此表单的各种类型的信息。这个表格没有增加'check all checkboxes'按钮的复杂性,在前端和写入数据库时​​没有任何问题。



使用当前栏目下面的代码我所面对的不仅仅是获取按钮来一次只检查所有复选框,而是在页面加载时越过这个错误:

无法转换类型'System.Web.UI.WebControls.TableCell'通过引用转换,装箱转换,拆箱转换,包装转换或空类型转换b
$ b

从我对相似(但不是确切)错误的研究中,我需要将复选框转换为其他形式。我以前从未遇到过这种情况,我不仅仅在寻找教育参考资料,而且还提出了一些关于如何解决转换部分的指示,但不仅仅是准确和最新的(在过去几年中)关于如何解决我可以解决更大的按钮正确检查所有19个复选框。



我在这里做错了什么,这是正确的方式来获得我想要的结果吗? DetailsView控件?我不仅希望学习如何解决这个问题,而且还要学习这个挑战背后的理论/逻辑,以便我可以正确地学习。



aspx代码。

 (注意细节视图中的一些化妆品代码已被省略)


< %@ Page Title =Test PageLanguage =C#MasterPageFile =〜/ Site.masterAutoEventWireup =trueCodeFile =form2.aspx.csInherits =form2%>
< asp:Content ID =Content1ContentPlaceHolderID =HeadContentRunat =Server>
< / asp:Content>
< asp:Content ID =Content2ContentPlaceHolderID =FeaturedContentRunat =Server>
< / asp:Content>
< asp:Content ID =Content3ContentPlaceHolderID =MainContentRunat =Server>
< asp:DetailsView ID =DetailsViewrunat =serverAutoGenerateColumns =FalseCellPadding =4DataSourceID =SqlDataSource1ForeColor =#333333GridLines =None>
< AlternatingRowStyle BackColor =White/>
< insert asp cosmetic gobbledy gook here>
<字段>
< asp:BoundField DataField =Field_1HeaderText =Ticket NumberSortExpression =Field_1/>
< asp:BoundField DataField =Field 2HeaderText =Field 2SortExpression =Field_2/>
< asp:BoundField DataField =Field_3HeaderText =Field 3SortExpression =Field_3/>
< asp:BoundField DataField =Field_4HeaderText =Field 4SortExpression =Field_4/>
< asp:BoundField DataField =Field_5HeaderText =Field 5SortExpression =Field_5/>
< asp:BoundField DataField =Field_6HeaderText =Field 6SortExpression =Field_6/>
< asp:BoundField DataField =Field_7HeaderText =Field 7SortExpression =Field_7/>
< asp:BoundField DataField =Field_8HeaderText =Field 8SortExpression =Field_8/>
< asp:BoundField DataField =Field_9HeaderText =Field 9SortExpression =Field_9/>
< asp:BoundField DataField =Field_10HeaderText =Field 10SortExpression =Field_10/>
< asp:CheckBoxField DataField =Check_Box_1HeaderText =复选框1SortExpression =Check_Box_1/>
< asp:CheckBoxField DataField =Check_Box_2HeaderText =复选框2SortExpression =Check_Box_2/>
< asp:CheckBoxField DataField =Check_Box_3HeaderText =复选框3SortExpression =Check_Box_3/>
< asp:CheckBoxField DataField =Check_Box_4HeaderText =Check Box 4SortExpression =Check_Box_4/>
< asp:CheckBoxField DataField =Check_Box_5HeaderText =Check Box 5SortExpression =Check_Box_5/>
< asp:CheckBoxField DataField =Check_Box_6HeaderText =Check Box 6SortExpression =Check_Box_6/>
< asp:CheckBoxField DataField =Check_Box_7HeaderText =复选框7SortExpression =Check_Box_7/>
< asp:CheckBoxField DataField =Check_Box_8HeaderText =复选框8SortExpression =Check_Box_8/>
< asp:CheckBoxField DataField =Check_Box_9HeaderText =复选框9SortExpression =Check_Box_9/>
< asp:CheckBoxField DataField =Check_Box_10HeaderText =复选框10SortExpression =Check_Box_10/>
< asp:CheckBoxField DataField =Check_Box_11HeaderText =复选框11SortExpression =Check_Box_11/>
< asp:CheckBoxField DataField =Check_Box_12HeaderText =复选框12SortExpression =Check_Box_12/>
< asp:CheckBoxField DataField =Check_Box_13HeaderText =复选框13SortExpression =Check_Box_13/>
< asp:CheckBoxField DataField =Check_Box_14HeaderText =复选框14SortExpression =Check_Box_14/>
< asp:CheckBoxField DataField =Check_Box_15HeaderText =复选框15SortExpression =Check_Box_15/>
< asp:CheckBoxField DataField =Check_Box_16HeaderText =复选框16SortExpression =Check_Box_16/>
< asp:CheckBoxField DataField =Check_Box_17HeaderText =复选框17SortExpression =Check_Box_17/>
< asp:CheckBoxField DataField =Check_Box_18HeaderText =复选框18SortExpression =Check_Box_18/>
< asp:CheckBoxField DataField =Check_Box_19HeaderText =复选框19SortExpression =Check_Box_19/>


< asp:ButtonField ButtonType =ButtonCommandName =btnSelectAllText =选择/检查所有服务器


< b< asp:BoundField DataField =Field_11HeaderText =Field 11SortExpression =Field_11/>
< asp:BoundField DataField =Field_12HeaderText =Field 12SortExpression =Field_12/>
< asp:BoundField DataField =Field_13HeaderText =Field 13SortExpression =Field_13/>

< asp:CommandField ButtonType =ButtonNewText =CreateRecordShowInsertButton =True/>
< / Fields>
< more asp非必需化妆品gobbledy gook>

< / asp:DetailsView>
< asp:SqlDataSource ID =SqlDataSource1ConnectionString =<%$ ConnectionStrings:test_form_connect%> runat =serverInsertCommand =INSERT INTO [test]。[detailsview_test_form]([Field_1],[Field_2],[Field_3],[Field_4],[Field_5],[Field_6],[Field_7],[Field_8] [Field_9],[Field_10],[Check_Box_1],[Check_Box_2],[Check_Box_3],[Check_Box_4],[Check_Box_5],[Check_Box_6],[Check_Box_7],[Check_Box_8],[Check_Box_9],[Check_Box_10],[Check_Box_11 (@ Field_1),[Check_Box_12],[Check_Box_13],[Check_Box_14],[Check_Box_15],[Check_Box_16],[Check_Box_17] ,@ Field_2,@ Field_3,@ Field_4,@ Field_5,@ Field_6,@ Field_7,@ Field_8,@ Field_9,@ Field_10,@ Check_Box_1,@ Check_Box_2,@ Check_Box_3,@ Check_Box_4,@ Check_Box_5,@ Check_Box_6,@ Check_Box_7,@ Check_Box_8,Check_Box_9,Check_Box_10,Check_Box_11,Check_Box_12,Check_Box_13,Check_Box_14,Check_Box_15,Check_Box_16,Check_Box_17,Check_Box_18,Check_Box_19,Field_11,Field_12,Field_13)

< InsertParameters>
< asp:Parameter Name =Field_1/>
< asp:Parameter Name =Field_2/>
< asp:Parameter Name =Field_3/>
< asp:Parameter Name =Field_4/>
< asp:Parameter Name =Field_5/>
< asp:Parameter Name =Field_6/>
< asp:Parameter Name =Field_7/>
< asp:Parameter Name =Field_8/>
< asp:Parameter Name =Field_9/>
< asp:Parameter Name =Field_10/>
< asp:Parameter Name =Check_Box_1/>
< asp:Parameter Name =Check_Box_2/>
< asp:Parameter Name =Check_Box_3/>
< asp:Parameter Name =Check_Box_4/>
< asp:Parameter Name =Check_Box_5/>
< asp:Parameter Name =Check_Box_6/>
< asp:Parameter Name =Check_Box_7/>
< asp:Parameter Name =Check_Box_8/>
< asp:Parameter Name =Check_Box_9/>
< asp:Parameter Name =Check_Box_10/>
< asp:Parameter Name =Check_Box_11/>
< asp:Parameter Name =Check_Box_12/>
< asp:Parameter Name =Check_Box_13/>
< asp:Parameter Name =Check_Box_14/>
< asp:Parameter Name =Check_Box_15/>
< asp:Parameter Name =Check_Box_16/>
< asp:Parameter Name =Check_Box_17/>
< asp:Parameter Name =Check_Box_18/>
< asp:Parameter Name =Check_Box_19/>
< asp:Parameter Name =Field_11/>
< asp:Parameter Name =Field_12/>
< asp:Parameter Name =Field_13/>

< / InsertParameters>
< / asp:SqlDataSource>


< / asp:内容>

.....以及cs码:

  using System; 
使用System.Configuration;
使用System.Collections;
使用System.Data;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.UI.WebControls;
使用System.Web.UI.WebControls.WebParts;
使用System.Web.UI.HtmlControls;

public partial class form2:System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{



protected void DetailsView_ItemCommand(Object sender,DetailsViewCommandEventArgs e)
{
foreach(Details
if(e.CommandName ==btnSelectAll)
{
DetailsViewRow row = DetailsView1.Rows [9];
(row.Cells [10] as CheckBox).Checked = true;
DetailsViewRow row1 = DetailsView1.Rows [10];
(row1.Cells [11] as CheckBox).Checked = true;
DetailsViewRow row2 = DetailsView1.Rows [11];
(row.Cells [12] as CheckBox).Checked = true;
DetailsViewRow row3 = DetailsView1.Rows [12];
(row.Cells [13] as CheckBox).Checked = true;
DetailsViewRow row4 = DetailsView1.Rows [13]; $
DetailsViewRow row5 = DetailsView1.Rows [14];
(row.Cells [ 15]作为CheckBox).Checked = true;
DetailsViewRow row6 = DetailsView1.Rows [15];
(row.Cells [16]作为CheckBox).Checked = true;
DetailsViewRow row7 = DetailsView1.Rows [16];
(row.Cells [17]作为CheckBox).Checked = true;
DetailsViewRow row8 = DetailsView1.Rows [17];
(row.Cells [18]作为CheckBox).Checked = true;
DetailsViewRow row9 = DetailsView1.Rows [18];
(row.Cells [19]作为CheckBox).Checked = true;
DetailsViewRow row10 = DetailsView1.Rows [19];
(row.Cells [20]作为CheckBox).Checked = true;
DetailsViewRow row11 = DetailsView1.Rows [20];
(row.Cells [21]作为CheckBox).Checked = true;
DetailsViewRow row12 = DetailsView1.Rows [21];
(row.Cells [22]作为CheckBox).Checked = true;
DetailsViewRow row13 = DetailsView1.Rows [22];
(row.Cells [23]作为CheckBox).Checked = true;
DetailsViewRow row14 = DetailsView1.Rows [23];
(row.Cells [24]作为CheckBox).Checked = true;
DetailsViewRow row15 = DetailsView1.Rows [24];
(row.Cells [25]作为CheckBox).Checked = true;
DetailsViewRow row16 = DetailsView1.Rows [25];
(row.Cells [26]作为CheckBox).Checked = true;
DetailsViewRow row17 = DetailsView1.Rows [26];
(row.Cells [27]作为CheckBox).Checked = true;
DetailsViewRow row18 = DetailsView1.Rows [27];
(row.Cells [28]作为CheckBox).Checked = true;
DetailsViewRow row19 = DetailsView1.Rows [28];
(row.Cells [29]作为CheckBox).Checked = true;


$ b}
}
}


<通过引用转换,装箱转换,拆箱转换,包装转换或空类型获取'System.Web.UI.WebControls.CheckBox'的原因转换是因为你试图将一个单元格转换成一个CheckBox。



请注意我在行单元的ControlCollection中找到CheckBox控件。



下面是测试的示例代码作品:

表格:

 < asp:DetailsView ID = DetailsView1runat =serverAutoGenerateColumns =FalseCellPadding =4ForeColor =#333333GridLines =NoneOnItemCommand =DetailsView1_ItemCommand> 
< AlternatingRowStyle BackColor =White/>
<字段>
< asp:ButtonField ButtonType =ButtonCommandName =btnSelectAllText =选择/检查所有服务器/>
< asp:ButtonField ButtonType =ButtonCommandName =btnEditText =Edit/>
< asp:ButtonField ButtonType =ButtonCommandName =btnCancelText =Cancel/>
< asp:ButtonField ButtonType =ButtonCommandName =btnSaveText =Save/>
< asp:CommandField ButtonType =ButtonNewText =CreateRecordShowInsertButton =True/>
< / Fields>
< / asp:DetailsView>

代码背后:

  DataTable m_table = null; 

public DataTable表
{
get
{
if(ViewState [m_table]!= null)
return(DataTable)的ViewState [ m_table];
else
返回null;
}
set
{
ViewState [m_table] = value;




public static T FindControl< T>(ControlCollection controls)
{
for(int i = 0; i < controls.Count; i ++)
{
if(controls [i] is T)
return(T)(object)controls [i];
}

return default(T);


$ b protected void Page_Load(object sender,EventArgs e)
{
if(!Page.IsPostBack)
{
table = new DataTable();

DataColumn col1 =新DataColumn(Field_1);
DataColumn col11 =新DataColumn(Check_Box_1);
DataColumn col12 =新的DataColumn(Check_Box_2);
DataColumn col13 = new DataColumn(Check_Box_3);

col1.DataType = System.Type.GetType(System.String);
col11.DataType = System.Type.GetType(System.Boolean);
col12.DataType = System.Type.GetType(System.Boolean);
col13.DataType = System.Type.GetType(System.Boolean);

table.Columns.Add(col1);
table.Columns.Add(col11);
table.Columns.Add(col12);
table.Columns.Add(col13);

DataRow row = table.NewRow();
row [col1] =1;
row [col11] = false;
row [col12] = false;
row [col13] = false;

table.Rows.Add(row);

DetailsView1.DataSource = table;
DetailsView1.DataBind();



$ b protected void DetailsView_ItemCommand(Object sender,DetailsViewCommandEventArgs e)
{
if(e.CommandName ==btnSelectAll )
{
foreach(DetailsView1.Rows中的DetailsViewRow行)
{
for(int i = 0; i< row.Cells.Count; i ++)
{
CheckBox cb = FindControl< CheckBox>(row.Cells [i] .Controls);
if(cb!= null)
{
cb.Checked = true;



$ b if(e.CommandName ==btnSave)
{
int j = 0;
foreach(DetailsView1.Rows中的DetailsViewRow行)
{
for(int i = 0; i< row.Cells.Count; i ++)
{
TextBox tb = FindControl< TextBox>(row.Cells [i] .Controls);
if(tb!= null)
{
table.Rows [0] [j] = tb.Text;
}

CheckBox cb = FindControl< CheckBox>(row.Cells [i] .Controls);
if(cb!= null)
{
table.Rows [0] [j] = cb.Checked;
}
}
j ++;
}

DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
DetailsView1.DataSource = table;
DetailsView1.DataBind();

if(e.CommandName ==btnEdit)
{
DetailsView1.ChangeMode(DetailsViewMode.Edit);
DetailsView1.DataSource = table;
DetailsView1.DataBind();
}
if(e.CommandName ==btnCancel)
{
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
DetailsView1.DataSource = table;
DetailsView1.DataBind();
}
}


Note: I've updated the code for this question to make the example a bit clearer and leverages the sample code provided by Karl Anderson below. I am also open to other ways of getting what I need to accomplish finalized.

I'm in the process of creating a form which includes multiple check boxes that may or may not be leveraged for each request. I'm attempting to create a button below these checkboxes in the DetailsView grid that will only check (as opposed to a button that will check and uncheck) the boxes if the need to check them all arises. As you can see from the code below that there are multiple text boxes/BoundFields surrounding the checkboxes that hold various types of information for this form. The form without the added complexity of the 'check all checkboxes' button works without any issues on the frontend and when writing to the database.

Using the code below the current hurdle I'm facing is not only getting the button to only check all the checkboxes at once, but getting past this error when the page loads:

Cannot convert type 'System.Web.UI.WebControls.TableCell' to 'System.Web.UI.WebControls.CheckBox' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion

From my research into similar (but not exact) errors, I need to convert the checkboxes into some other form. I've never faced this scenario before and I'm pulling my hair out not only looking for educational references but some sort of pointer on how to resolve not only the conversion portion but accurate and current (within the last few years) references on how I can resolve the bigger issue of the button correctly checking all 19 checkboxes.

What am I doing wrong here and is this the correct way to get the results I want doe a DetailsView? I'd not only like to learn how to resolve this but also learn the theory/logic behind this challenge so I can learn it the right way.

aspx code.

(Note some cosmetic code for the details view has been omitted)


<%@ Page Title="Test Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="form2.aspx.cs" Inherits="form2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:DetailsView ID="DetailsView" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None">
    <AlternatingRowStyle BackColor="White" />
    <insert asp cosmetic gobbledy gook here>
    <Fields>
        <asp:BoundField DataField="Field_1" HeaderText="Ticket Number" SortExpression="Field_1" />
        <asp:BoundField DataField="Field 2" HeaderText="Field 2" SortExpression="Field_2" />
        <asp:BoundField DataField="Field_3" HeaderText="Field 3" SortExpression="Field_3" />
        <asp:BoundField DataField="Field_4" HeaderText="Field 4" SortExpression="Field_4" />
        <asp:BoundField DataField="Field_5" HeaderText="Field 5" SortExpression="Field_5" />
        <asp:BoundField DataField="Field_6" HeaderText="Field 6" SortExpression="Field_6" />
        <asp:BoundField DataField="Field_7" HeaderText="Field 7" SortExpression="Field_7" />
        <asp:BoundField DataField="Field_8" HeaderText="Field 8" SortExpression="Field_8" />
        <asp:BoundField DataField="Field_9" HeaderText="Field 9" SortExpression="Field_9" />
        <asp:BoundField DataField="Field_10" HeaderText="Field 10" SortExpression="Field_10" />
        <asp:CheckBoxField DataField="Check_Box_1" HeaderText="Check Box 1" SortExpression="Check_Box_1" />
        <asp:CheckBoxField DataField="Check_Box_2" HeaderText="Check Box 2" SortExpression="Check_Box_2" />
        <asp:CheckBoxField DataField="Check_Box_3" HeaderText="Check Box 3" SortExpression="Check_Box_3" />
        <asp:CheckBoxField DataField="Check_Box_4" HeaderText="Check Box 4" SortExpression="Check_Box_4" />
        <asp:CheckBoxField DataField="Check_Box_5" HeaderText="Check Box 5" SortExpression="Check_Box_5" />
        <asp:CheckBoxField DataField="Check_Box_6" HeaderText="Check Box 6" SortExpression="Check_Box_6" />
        <asp:CheckBoxField DataField="Check_Box_7" HeaderText="Check Box 7" SortExpression="Check_Box_7" />
        <asp:CheckBoxField DataField="Check_Box_8" HeaderText="Check Box 8" SortExpression="Check_Box_8" />
        <asp:CheckBoxField DataField="Check_Box_9" HeaderText="Check Box 9" SortExpression="Check_Box_9" />
        <asp:CheckBoxField DataField="Check_Box_10" HeaderText="Check Box 10" SortExpression="Check_Box_10" />
        <asp:CheckBoxField DataField="Check_Box_11" HeaderText="Check Box 11" SortExpression="Check_Box_11" />
        <asp:CheckBoxField DataField="Check_Box_12" HeaderText="Check Box 12" SortExpression="Check_Box_12" />
        <asp:CheckBoxField DataField="Check_Box_13" HeaderText="Check Box 13" SortExpression="Check_Box_13" />
        <asp:CheckBoxField DataField="Check_Box_14" HeaderText="Check Box 14" SortExpression="Check_Box_14" />
        <asp:CheckBoxField DataField="Check_Box_15" HeaderText="Check Box 15" SortExpression="Check_Box_15" />
        <asp:CheckBoxField DataField="Check_Box_16" HeaderText="Check Box 16" SortExpression="Check_Box_16" />
        <asp:CheckBoxField DataField="Check_Box_17" HeaderText="Check Box 17" SortExpression="Check_Box_17" />
        <asp:CheckBoxField DataField="Check_Box_18" HeaderText="Check Box 18" SortExpression="Check_Box_18" />
        <asp:CheckBoxField DataField="Check_Box_19" HeaderText="Check Box 19" SortExpression="Check_Box_19" />


        <asp:ButtonField ButtonType="Button" CommandName="btnSelectAll" Text="Select/Check All Servers"


        <asp:BoundField DataField="Field_11" HeaderText="Field 11" SortExpression="Field_11" />
        <asp:BoundField DataField="Field_12" HeaderText="Field 12" SortExpression="Field_12" />
        <asp:BoundField DataField="Field_13" HeaderText="Field 13" SortExpression="Field_13" />

        <asp:CommandField ButtonType="Button" NewText="CreateRecord" ShowInsertButton="True" />
    </Fields>
    <more asp non essential cosmetic gobbledy gook>

        </asp:DetailsView>
        <asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:test_form_connect %>" runat="server" InsertCommand="INSERT INTO [test].[detailsview_test_form] ([Field_1], [Field_2], [Field_3], [Field_4], [Field_5], [Field_6], [Field_7], [Field_8], [Field_9], [Field_10], [Check_Box_1], [Check_Box_2], [Check_Box_3], [Check_Box_4], [Check_Box_5], [Check_Box_6], [Check_Box_7], [Check_Box_8], [Check_Box_9], [Check_Box_10], [Check_Box_11], [Check_Box_12], [Check_Box_13], [Check_Box_14], [Check_Box_15], [Check_Box_16], [Check_Box_17], [Check_Box_18], [Check_Box_19], [Field_11], [Field_12], [Field_13]) VALUES (@Field_1, @Field_2, @Field_3, @Field_4, @Field_5, @Field_6, @Field_7, @Field_8, @Field_9, @Field_10, @Check_Box_1, @Check_Box_2, @Check_Box_3, @Check_Box_4, @Check_Box_5, @Check_Box_6, @Check_Box_7, @Check_Box_8, @Check_Box_9, @Check_Box_10, @Check_Box_11, @Check_Box_12, @Check_Box_13, @Check_Box_14, @Check_Box_15, @Check_Box_16, @Check_Box_17, @Check_Box_18, @Check_Box_19, @Field_11, @Field_12, @Field_13) ">

        <InsertParameters>
    <asp:Parameter Name="Field_1" />
    <asp:Parameter Name="Field_2" />
    <asp:Parameter Name="Field_3" />
    <asp:Parameter Name="Field_4" />
    <asp:Parameter Name="Field_5" />
    <asp:Parameter Name="Field_6" />
    <asp:Parameter Name="Field_7" />
    <asp:Parameter Name="Field_8" />
    <asp:Parameter Name="Field_9" />
    <asp:Parameter Name="Field_10" />
    <asp:Parameter Name="Check_Box_1" />
    <asp:Parameter Name="Check_Box_2" />
    <asp:Parameter Name="Check_Box_3" />
    <asp:Parameter Name="Check_Box_4" />
    <asp:Parameter Name="Check_Box_5" />
    <asp:Parameter Name="Check_Box_6" />
    <asp:Parameter Name="Check_Box_7" />
    <asp:Parameter Name="Check_Box_8" />
    <asp:Parameter Name="Check_Box_9" />
    <asp:Parameter Name="Check_Box_10" />
    <asp:Parameter Name="Check_Box_11" />
    <asp:Parameter Name="Check_Box_12" />
    <asp:Parameter Name="Check_Box_13" />
    <asp:Parameter Name="Check_Box_14" />
    <asp:Parameter Name="Check_Box_15" />
    <asp:Parameter Name="Check_Box_16" />
    <asp:Parameter Name="Check_Box_17" />
    <asp:Parameter Name="Check_Box_18" />
    <asp:Parameter Name="Check_Box_19" />
    <asp:Parameter Name="Field_11" />
    <asp:Parameter Name="Field_12" />
    <asp:Parameter Name="Field_13" />

            </InsertParameters>
            </asp:SqlDataSource>


</asp:Content>

.....and the cs code:

using System;
using System.Configuration;
using System.Collections;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class form2 : System.Web.UI.Page    
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void DetailsView1_ItemCommand(Object sender, DetailsViewCommandEventArgs e)
{
    foreach (Details
        if (e.CommandName == "btnSelectAll")
        {
        DetailsViewRow row = DetailsView1.Rows[9];
        (row.Cells[10] as CheckBox).Checked = true; 
        DetailsViewRow row1 = DetailsView1.Rows[10];
        (row1.Cells[11] as CheckBox).Checked = true;
        DetailsViewRow row2 = DetailsView1.Rows[11];
        (row.Cells[12] as CheckBox).Checked = true;
        DetailsViewRow row3 = DetailsView1.Rows[12];
        (row.Cells[13] as CheckBox).Checked = true;
        DetailsViewRow row4 = DetailsView1.Rows[13];
        (row.Cells[14] as CheckBox).Checked = true;
        DetailsViewRow row5 = DetailsView1.Rows[14];
        (row.Cells[15] as CheckBox).Checked = true;
        DetailsViewRow row6 = DetailsView1.Rows[15];
        (row.Cells[16] as CheckBox).Checked = true;
        DetailsViewRow row7 = DetailsView1.Rows[16];
        (row.Cells[17] as CheckBox).Checked = true;
        DetailsViewRow row8 = DetailsView1.Rows[17];
        (row.Cells[18] as CheckBox).Checked = true;
        DetailsViewRow row9 = DetailsView1.Rows[18];
        (row.Cells[19] as CheckBox).Checked = true;
        DetailsViewRow row10 = DetailsView1.Rows[19];
        (row.Cells[20] as CheckBox).Checked = true;
        DetailsViewRow row11 = DetailsView1.Rows[20];
        (row.Cells[21] as CheckBox).Checked = true;
        DetailsViewRow row12 = DetailsView1.Rows[21];
        (row.Cells[22] as CheckBox).Checked = true;
        DetailsViewRow row13 = DetailsView1.Rows[22];
        (row.Cells[23] as CheckBox).Checked = true;
        DetailsViewRow row14 = DetailsView1.Rows[23];
        (row.Cells[24] as CheckBox).Checked = true;
        DetailsViewRow row15 = DetailsView1.Rows[24];
        (row.Cells[25] as CheckBox).Checked = true;
        DetailsViewRow row16 = DetailsView1.Rows[25];
        (row.Cells[26] as CheckBox).Checked = true;
        DetailsViewRow row17 = DetailsView1.Rows[26];
        (row.Cells[27] as CheckBox).Checked = true;
        DetailsViewRow row18 = DetailsView1.Rows[27];
        (row.Cells[28] as CheckBox).Checked = true;
        DetailsViewRow row19 = DetailsView1.Rows[28];
        (row.Cells[29] as CheckBox).Checked = true;



    }
}   
}

解决方案

The reason you are getting "'System.Web.UI.WebControls.CheckBox' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion" is because you are trying to cast a Cell into a CheckBox.

Please note that I find the CheckBox control inside the Rows Cell's ControlCollection.

Below is tested sample code that works:

Form:

    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnItemCommand="DetailsView1_ItemCommand">
<AlternatingRowStyle BackColor="White" />
<Fields>
    <asp:ButtonField ButtonType="Button" CommandName="btnSelectAll" Text="Select/Check All Servers" />
    <asp:ButtonField ButtonType="Button" CommandName="btnEdit" Text="Edit" />
    <asp:ButtonField ButtonType="Button" CommandName="btnCancel" Text="Cancel" />
    <asp:ButtonField ButtonType="Button" CommandName="btnSave" Text="Save" />
    <asp:CommandField ButtonType="Button" NewText="CreateRecord" ShowInsertButton="True" />
</Fields>
</asp:DetailsView>

Code Behind:

    DataTable m_table = null;

    public DataTable table
    {
        get
        {
            if (ViewState["m_table"] != null)
                return (DataTable)ViewState["m_table"];
            else
                return null;
        }
        set
        {
            ViewState["m_table"] = value;
        }
    }


    public static T FindControl<T>(ControlCollection controls)
    {
        for (int i = 0; i < controls.Count; i++)
        {
            if (controls[i] is T)
                return (T)(object)controls[i];
        }

            return default(T);
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            table = new DataTable();

            DataColumn col1 = new DataColumn("Field_1");
            DataColumn col11 = new DataColumn("Check_Box_1");
            DataColumn col12 = new DataColumn("Check_Box_2");
            DataColumn col13 = new DataColumn("Check_Box_3");

            col1.DataType = System.Type.GetType("System.String");
            col11.DataType = System.Type.GetType("System.Boolean");
            col12.DataType = System.Type.GetType("System.Boolean");
            col13.DataType = System.Type.GetType("System.Boolean");

            table.Columns.Add(col1);
            table.Columns.Add(col11);
            table.Columns.Add(col12);
            table.Columns.Add(col13);

            DataRow row = table.NewRow();
            row[col1] = "1";
            row[col11] = false;
            row[col12] = false;
            row[col13] = false;

            table.Rows.Add(row);

            DetailsView1.DataSource = table;
            DetailsView1.DataBind();
        }

    }

    protected void DetailsView1_ItemCommand(Object sender, DetailsViewCommandEventArgs e)
    {
        if (e.CommandName == "btnSelectAll")
        {
            foreach (DetailsViewRow row in DetailsView1.Rows)
            {
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    CheckBox cb = FindControl<CheckBox>(row.Cells[i].Controls);
                    if (cb != null)
                    {
                        cb.Checked = true;
                    }                        
                }                    
            }
        }
        if (e.CommandName == "btnSave")
        {
            int j = 0;
            foreach (DetailsViewRow row in DetailsView1.Rows)
            {
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    TextBox tb = FindControl<TextBox>(row.Cells[i].Controls);
                    if (tb != null)
                    {
                        table.Rows[0][j] = tb.Text;
                    }

                    CheckBox cb = FindControl<CheckBox>(row.Cells[i].Controls);
                    if (cb != null)
                    {
                        table.Rows[0][j] = cb.Checked;
                    }
                }
                j++;
            }

            DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
            DetailsView1.DataSource = table;
            DetailsView1.DataBind();
        }
        if (e.CommandName == "btnEdit")
        {
            DetailsView1.ChangeMode(DetailsViewMode.Edit);
            DetailsView1.DataSource = table;
            DetailsView1.DataBind();
        }
        if (e.CommandName == "btnCancel")
        {
            DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
            DetailsView1.DataSource = table;
            DetailsView1.DataBind();
        }
    }

这篇关于在DetailsView错误中选择所有复选框按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆