我的表里有8列我要在这8列前动态添加一个模班列,在其中嵌入CheckBox,然后显示在DataGrid里,让用户可以选中。可是我没法判断用户选中没有,原因是我根本搜索不到checkbox这个控件,用FindControl也找不到,
我调试后发现,items[1].cell里也只有原来那8列,可datagrid显示的是正确的,加上那个模班列倒是9列,不知怎么回事。我是先动态添加这个嵌入CheckBox的这个模班列并为它把edit item都附上了checkbox,然后用生成datatable.defaultview来为datagrid添加datasource,是不是我的流程有问题到底什么问题啊,真是疑惑?

解决方案 »

  1.   

    补充,静态的没问题,能找到checkbox,我试过。但动态的就是找不到拉。
      

  2.   

    SqlConnection MyConnection = new SqlConnection("server=(local);database=bysj;Trusted_Connection=yes");
    string DeleteCmd = "DELETE FROM ygwage WHERE ygid = @ygid AND wagedate BETWEEN @LowerDate AND @UpperDate";
    //And dixin=@dixin";
    SqlCommand MyCommand = new SqlCommand(DeleteCmd, MyConnection);
    MyCommand.Parameters.Add("@ygid", SqlDbType.Int);

    MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
    MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);

    MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
    MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);

                 bool IsChecked = false; 
    // 此回圈判断哪些核取方块已被勾选,并将相对应的资料记录删除。
    foreach (DataGridItem CheckBoxItem in DataGrid1.Items)
    {   
    IsChecked = ((CheckBox)CheckBoxItem.FindControl("CB")).Checked;
    // if(IsChecked==false)
    // {
    // Page.RegisterStartupScript("Alert","<script language=javascript>alert('请选择要删除的项!');</script>");
    // }
    if (IsChecked) 
    {
    // 取得使用者欲删除之资料记录的主索引键(亦即员工编号)
    // 然後将它指派给 DELETE 命令叙述中的参数。
    MyCommand.Parameters["@ygid"].Value =DataGrid1.DataKeys[CheckBoxItem.ItemIndex];
    //MyCommand.Parameters["@dixin"].Value =DataGrid1.DataKeys[CheckBoxItem.ItemIndex];
    MyCommand.Connection.Open();
    try
    {
    // 呼叫 ExecuteNonQuery() 方法以便针对资料来源执行 DELETE 命令

    MyCommand.ExecuteNonQuery();
    Message1.Text = "成功删除";
    Message1.Visible=true;
    //Page.RegisterStartupScript("Alert","<script language=javascript>alert('成功删除!');</script>");
    }
    catch 
    //(SqlException)
    {
    Message.Text = "错误: 无法删除资料纪录";
    //Response.Write("<script>alert('删除失败!');history.back();</Script>");
    }
    MyCommand.Connection.Close();
    }
    }
    // 重新系结至资料来源
    BindGridToSource();
      

  3.   

    foreach (DataGridItem CheckBoxItem in DataGrid1.Items)
    这个我用过,关键是怎么能找到动态添加的checkbox
      

  4.   

    我需要变换控件,或是command,或是checkbox,还有可能是textBox
      

  5.   

    ---"我调试后发现,items[1].cell里也只有原来那8列,可datagrid显示的是正确的"很可能是你动态增加的代码放置的地方不对,你把代码框架大致贴出来看看。
      

  6.   

    <asp:TemplateColumn HeaderText="选择">
      <ItemTemplate>
        <INPUT name="chkItem" type="checkbox" value='<%# DataBinder.Eval(Container, "DataItem.id") %>' class="nonebg">
      </ItemTemplate>
    </asp:TemplateColumn>
    // 自己加个按钮触发,看看就明白了
    private void Button1_Click(object sender, System.EventArgs e)
    {
      if(Request.Form.GetValues("chkItem").Length > 0)
      {
        Response.Write(Request.Form.Get("chkItem");
      }
    }
      

  7.   

    sorry 笔误:Response.Write(Request.Form.Get("chkItem"); 最后面少了个“)”
      

  8.   

    关注,有没有人可以说一下的,注意楼主的意思是在模板列当中,后台用代码定义的方式动态向模板列添加checkbox,当网页返回时,用e.item.findcortol找不到,不知如何解决?高手帮忙。我也遇到这个问题了,关键是动态添加的控件,返回后,没有返回状态。
      

  9.   

    哈,天清风,我就是这个意思。CnEve(龙哥哥),是动态添加,
    <asp:TemplateColumn HeaderText="选择">
      <ItemTemplate>
        <INPUT name="chkItem" type="checkbox" value='<%# DataBinder.Eval(Container, "DataItem.id") %>' class="nonebg">
      </ItemTemplate>
    </asp:TemplateColumn>
    难道这是动态添加的么?代码在我公司电脑里,明天发上来。
      

  10.   

    关键要在后台生成,且我需要变换控件,或是command,或是checkbox,还有可能是textBox