<asp:TemplateColumn>
    <ItemTemplate>
         <asp:CheckBox  
            Text='<%# DataBinder.Eval(Container.DataItem,"auto_id")%>' 
                  runat="server" ID="Checkbox11" NAME="Checkbox11">
   </ItemTemplate>
</asp:TemplateColumn>
我在前台加了一个删除按钮,双击后写事件,代码如下:private void btn_del_Click(object sender, System.EventArgs e)
{
for(int i=0;i<showData.Items.Count;i++)
{
            chk=(CheckBox)showData.Items[i].Cells[0].FindControl("checkbox11"); 
                              if(chk.Checked)
  {
                              //执行删除的语句
            }
}1.用服务器控件<asp:CheckBox></asp:CheckBox>
2.还有你的删除应该是上面那样防在循环体内吧?
3.提示什么错误?

解决方案 »

  1.   

    我不知道服务器控件怎么用。我想用checkbox因为可以实现删除多条记录。谢谢指点!
    我在html页面加了一个摸板列。
    提示错误
    “/Info”应用程序中的服务器错误。
    --------------------------------------------------------------------------------指定的转换无效。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 指定的转换无效。源错误: 
    行 133: for(int i=0;i<showData.Items.Count;i++)
    行 134: {
    行 135: chk=(CheckBox)showData.Items[i].Cells[0].FindControl("checkbox11"); 
    行 136:
    行 137:
     
      

  2.   

    如果我用服务器控件能实现在每一行的前面都加上checkbox控件吗?
    有这样的例子吗?能给我看看吗?
      

  3.   

    如果用html控件
      Dim i As Integer
            Dim c As Integer = DataGrid1.Items.Count
            Dim chkSelected As HtmlControls.HtmlInputCheckBox
                 Dim b As Integer = 0
            For i = 0 To (c - 1)
                '从列表依次选取 每行
                chkSelected = Nothing            chkSelected = DataGrid1.Items(i).FindControl("che")
                If (Not (chkSelected Is Nothing)) Then
                    '找到每行的复选框                If (chkSelected.Checked = True) Then
                        '如果复选框被选中,更新此行的内容                    list(i) = DataGrid1.Items(i).Cells(1).Text
                        Response.Write(list(i).ToString)
                    End If            End If
    用服务器控件:
      Dim i As Integer
            Dim c As Integer = DataGrid1.Items.Count
            Dim chkSelected As checkbox
                  Dim b As Integer = 0
            For i = 0 To (c - 1)
                '从列表依次选取 每行
                chkSelected = Nothing            chkSelected = DataGrid1.Items(i).FindControl("che")
                If (Not (chkSelected Is Nothing)) Then
                    '找到每行的复选框                If (chkSelected.Checked = True) Then
                        '如果复选框被选中,更新此行的内容                    list(i) = DataGrid1.Items(i).Cells(1).Text
                        Response.Write(list(i).ToString)
                    End If            End If
      

  4.   

    如果用html控件
      Dim i As Integer
            Dim c As Integer = DataGrid1.Items.Count
            Dim chkSelected As HtmlControls.HtmlInputCheckBox
                 Dim b As Integer = 0
            For i = 0 To (c - 1)
                '从列表依次选取 每行
                chkSelected = Nothing            chkSelected = DataGrid1.Items(i).FindControl("che")
                If (Not (chkSelected Is Nothing)) Then
                    '找到每行的复选框                If (chkSelected.Checked = True) Then
                        '如果复选框被选中,更新此行的内容                    list(i) = DataGrid1.Items(i).Cells(1).Text
                        Response.Write(list(i).ToString)
                    End If            End If
    用服务器控件:
      Dim i As Integer
            Dim c As Integer = DataGrid1.Items.Count
            Dim chkSelected As checkbox
                  Dim b As Integer = 0
            For i = 0 To (c - 1)
                '从列表依次选取 每行
                chkSelected = Nothing            chkSelected = DataGrid1.Items(i).FindControl("che")
                If (Not (chkSelected Is Nothing)) Then
                    '找到每行的复选框                If (chkSelected.Checked = True) Then
                        '如果复选框被选中,更新此行的内容                    list(i) = DataGrid1.Items(i).Cells(1).Text
                        Response.Write(list(i).ToString)
                    End If            End If
      

  5.   

    你用Html空件也可以了.
    <input type=checkbox  value ='<%# DataBinder.Eval(Container.DataItem,"auto_id")%>' runat="server" ID="Checkbox11" NAME="Checkbox11" onclick=del()>你用chk=(CheckBox)showData.Items[i].Cells[0].FindControl("checkbox11"); 
    中CheckBox是服务器空件<ASP:CheckBox>呀!你将chk=(CheckBox)showData.Items[i].Cells[0].FindControl("checkbox11"); 
    改为chk=(HtmlInputCheckBox)showData.Items[i].Cells[0].FindControl("checkbox11");
     
    不然当然出现System.InvalidCastException: 指定的转换无效。
      

  6.   

    如果要实现多项删除,应该先得到选中的CheckBox的值,然后再点击一个删除按钮,删除全部选中的纪录
      

  7.   

    public class DMBrowse : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DepartmentDataGrid;
    protected System.Web.UI.WebControls.LinkButton OpenLinkButton;
    protected System.Web.UI.WebControls.Label WarnLabel;
    protected System.Data.OleDb.OleDbConnection ole_Con;
    protected System.Data.OleDb.OleDbDataAdapter ole_Adapter_Cmd;
    protected System.Data.DataSet data_DS;
    //设定全局变量
    //设定排序字段,页码
    int pageIndex=0;
    //设定表名

    string department = "";

    //设定本网页的名字
    string currentPage="PMBrowse.aspx";

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(Session["user"] != null)
    {
    ole_Con = new MachineFactoryConName().Connection;
    department = new MachineFactoryTableName().tablenameDepartmentName;
    string selectStr = "select * from " + department;
    this.ole_Adapter_Cmd = new OleDbDataAdapter(selectStr,this.ole_Con);
    OleDbCommandBuilder ole_Cb = new OleDbCommandBuilder(this.ole_Adapter_Cmd);
    this.data_DS = new DataSet();
    try
    {
    this.ole_Adapter_Cmd.Fill(this.data_DS,department);
    }
    catch(Exception err)
    {
    string www = err.ToString();
    string req="prevPage="+System.Web.HttpUtility.UrlEncode(currentPage,System.Text.Encoding.UTF8);
    Response.Redirect("ErrorDataBase.aspx?"+req);
    }
    DataColumn[] dcPk = {data_DS.Tables[department].Columns["ID"]};  //对一个DataSet中的表添加约束
    data_DS.Tables[department].PrimaryKey = dcPk;
    DataColumn[] dcUk = {this.data_DS.Tables[department].Columns[department]};
    this.data_DS.Tables[department].Constraints.Add("UK",dcUk,false);
    InitPage();
    }
    else
    {
    Response.Redirect("ErrorRight.aspx");
    }
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()

    this.DepartmentDataGrid.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DepartmentDataGrid_ItemCommand);
    this.DepartmentDataGrid.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DepartmentDataGrid_PageIndexChanged);
    this.OpenLinkButton.Click += new System.EventHandler(this.OpenLinkButton_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void InitPage()
    {
    if(!Page.IsPostBack)
    {
    InitPageBeforePostBack();
    }
    else
    {
    InitPageAfterPostBack();
    }
    } private void InitPageBeforePostBack()
    {
    } private void InitPageAfterPostBack()
    {
    if(this.ViewState["pageIndex"] != null)
    {
    this.pageIndex = int.Parse(ViewState["pageIndex"].ToString());
    }
    } private void DepartmentDataGrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName == "Add")
    {
    if(((TextBox)e.Item.FindControl("NewDepartmentName")).Text != "")
    {
    try
    {
    DataRow dr = data_DS.Tables[department].NewRow();
    dr["ID"] = this.GetAutoNumber(department) + 1;
    dr[department] = ((TextBox)e.Item.FindControl("NewDepartmentName")).Text;
    this.data_DS.Tables[department].Rows.Add(dr);
    this.ole_Adapter_Cmd.Update(this.data_DS,department);
    }
    catch(Exception)
    {
    this.WarnLabel.Text = "该部门已经存在!";
    }
    BindGrid();
    }
    else
    {
    this.WarnLabel.Text = " 请输入你要添加的部门名称。";
    }
    }
    else if(e.CommandName == "Update")
    {

    foreach (DataGridItem di in this.DepartmentDataGrid.Items)
    {

    if (di.ItemType == ListItemType.Item || di.ItemType == ListItemType.AlternatingItem)
    {
    DataRow dr = this.data_DS.Tables[department].Rows.Find(DepartmentDataGrid.DataKeys[di.ItemIndex]);
    if (((CheckBox)di.FindControl("Delete")).Checked)
    {
    this.data_DS.Tables[department].Rows.Find(DepartmentDataGrid.DataKeys[di.ItemIndex]).Delete();
    }
    else
    {
    string ID = ((TextBox)di.FindControl("ID")).Text.ToString();
    if(((TextBox)di.FindControl("DepartmentName")).Text != "")
    {
    try
    {
    dr[department] = ((TextBox)di.FindControl("DepartmentName")).Text;
    }
    catch(Exception)
    {
    this.WarnLabel.Text = "该部门已经存在!";
    }
    }
    else
    {
    WarnLabel.Text = "自动编号=" + ID + " 的部门名称列不能为空!";
    return;
    }
    }
    }
    } // Save the changes if there are any.
    if (data_DS.HasChanges())
    {
    try
    {
    this.ole_Adapter_Cmd.Update(this.data_DS,department);
    }
    catch(Exception)
    {
    }
    }
        
    BindGrid();
    }

    } private void BindGrid()
    {
    int pageCount  = 0;
    double rowsCount = (double)this.data_DS.Tables[department].Rows.Count;
    double pageSize = (double)this.DepartmentDataGrid.PageSize;
    if( rowsCount/pageSize - (int)(rowsCount/pageSize) > 0.01)
    {
    pageCount = (int)(rowsCount/pageSize)+1;
    }
    else
    {
    pageCount = (int)(rowsCount/pageSize);
    }
    if(pageCount-1 >= this.pageIndex)
    {
    this.DepartmentDataGrid.CurrentPageIndex = this.pageIndex;
    }
    else
    {
    this.ViewState["pageIndex"] = this.pageIndex -1;
    this.DepartmentDataGrid.CurrentPageIndex = this.pageIndex - 1;
    }
    this.DepartmentDataGrid.DataSource=this.data_DS.Tables[0].DefaultView;
    this.DepartmentDataGrid.DataBind();
    } private void OpenLinkButton_Click(object sender, System.EventArgs e)
    {
    this.pageIndex = 0 ;
    this.ViewState["pageIndex"] = this.pageIndex;
    BindGrid();
    } private void DepartmentDataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    this.pageIndex = e.NewPageIndex;
    this.ViewState["pageIndex"] = this.pageIndex;
    this.DepartmentDataGrid.CurrentPageIndex = this.pageIndex;
    BindGrid();
    } private int GetAutoNumber(string TableName)
    {
    int AutoNumberCount =0;
    //string selectStr = "SELECT MAX("+FieldName+") FROM "+ TableName;
    string selectStr = "SELECT IDENT_CURRENT('" +TableName+ "') FROM "+ TableName;
    OleDbCommand myCommand = new OleDbCommand(selectStr,this.ole_Con);
    try
    { if(this.ole_Con.State == System.Data.ConnectionState.Closed)
    {
    this.ole_Con.Open();
    }

    AutoNumberCount = int.Parse(myCommand.ExecuteScalar().ToString());
    }
    catch(Exception)
    {
    this.ole_Con.Close();
    return -1;
    }
    this.ole_Con.Close();
    return AutoNumberCount;
    }
      

  8.   

    代码太多了。我感觉用不了那么多,给些关键的代码可以吗?
    to lwgj我也这么想的,但是总出错。
    能不能给个例子,把关键代码给我看看。
    我在客户端加的控件,想在cs文件里面写button的双击事件,总传不过来参数,怎么写?
      

  9.   

    代码太多了。我感觉用不了那么多,给些关键的代码可以吗?
    to lwgj我也这么想的,但是总出错。
    能不能给个例子,把关键代码给我看看。
    我在客户端加的控件,想在cs文件里面写button的双击事件,总传不过来参数,怎么写?
      

  10.   

    chk=(CheckBox)showData.Items[i].Cells[0].FindControl("checkbox11"); 
    把这句话改为如下:
    chk=(CheckBox)showData.Items[i].FindControl("checkbox11");