小弟是新手,我做个页面,添加一个DataGrid控件和一个按纽.DataGrid控件中有checkbox和状态两列.要求实现点击按纽能把checkbox中选中项的状态栏中的值改写成2.但是我写的代码选中后点击按纽,所选种的项的状态值却不改变,调试一晚上也不知道原因...大虾救命啊~~~
代码如下:
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 160px; POSITION: absolute; TOP: 144px" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<HeaderStyle Width="50px"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="cb" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="is_selected" HeaderText="状态">
<HeaderStyle Width="50px"></HeaderStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
<asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 360px; POSITION: absolute; TOP: 264px" runat="server" Text="Button"></asp:Button></FONT>
</form>
</body>
</HTML>
__________________________________________________________________________________________
------------------------------------------------------------------------------------------private void Page_Load(object sender, System.EventArgs e)
 {
    if(!this.Page.IsPostBack)
    BindToDG();
    // 在此处放置用户代码以初始化页面
 }private void BindToDG()
 {
   SqlConnection con=new SqlConnection("server=localhost;database=test;uid=sa;pwd=;");
   SqlDataAdapter sda=new SqlDataAdapter();
   sda.SelectCommand=new SqlCommand("select * from test",con);
   DataSet ds=new DataSet();
   sda.Fill(ds,"apt");
   this.DataGrid1.DataSource=ds.Tables["apt"];
   this.DataGrid1.DataBind();
 }private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
   for(int i=0;i<DataGrid1.Items.Count;i++)
     {
       if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
 {
     if(((CheckBox)e.Item.FindControl("cb")).Checked==true)
{
   SqlConnection con=new SqlConnection("server=localhost;database=test;uid=sa;pwd=;");
   con.Open();
   string str="update test set is_selected=2";
   SqlCommand cmd=new SqlCommand(str,con);
   cmd.ExecuteNonQuery();
 }
           }
      }

}private void Button1_Click(object sender, System.EventArgs e)
 {
    BindToDG();
 }

解决方案 »

  1.   

    改变状态的代码应该zaibutton的click响应事件中吧
    private void Button1_Click(object sender, System.EventArgs e)
     {
        foreach(DataGridItem dgi in DataGrid1.Items)
        {
            if(dgi.Cells[0].FindControl("cb").Checked==true)
            {
               updateit();
            }
        }
        BindToDG();
     }
      

  2.   

    这个写在 private void DataGrid1_ItemDataBound() 里不太合适 , 把它写到按钮的click里应该就好了,
      

  3.   

    SqlConnection con=new SqlConnection("server=localhost;database=test;uid=sa;pwd=;");
       con.Open();
       string str="update test set is_selected=2";
       SqlCommand cmd=new SqlCommand(str,con);
       cmd.ExecuteNonQuery();这段代码位置有问题!另外update test set is_selected=2需加where条件——(由checkbox事件获得参数)
      

  4.   

    还是不行啊,我一点按纽就不管选了没选的,都全部改成2了
    新改的代码如下private void Button1_Click(object sender, System.EventArgs e)
     {
        foreach(DataGridItem dgi in DataGrid1.Items)
           {
     if(((CheckBox)(dgi.Cells[0].FindControl("cb"))).Checked==true)
                    {
                        SqlConnection con = new SqlConnection("server=localhost;database=test;uid=sa;pwd=;");
               con.Open();
               SqlCommand cmd;
               string str="update test set is_selected=2";
      cmd=new SqlCommand(str,con );
                        cmd.ExecuteNonQuery();
                      }
                       
            }            BindToDG();
      }
      

  5.   

    string str="update test set is_selected=2";
    =>
    添加where 条件
      

  6.   

    "update test set is_selected=2 where id = " + DataGrid1.DataKeys[dgi.ItemIndex].ToString()
      

  7.   

    设置datagrid的 DataKeyField="ID"
      

  8.   

    但是我循环已经加判别条件了的,只对被选中的做改写操作.
     if(((CheckBox)(dgi.Cells[0].FindControl("cb"))).Checked==true)