我用datagrid用adapter.update(dataset)修改数据库的时候页面的数据修改了而没有将修改后的数据写入数据库,不知道是为什么,特着急,请高人指点,关键部分代码如下: <asp:DataGrid AutoGenerateColumns="false" id="All_Admin" runat="server"  Width="100%"  AlternatingItemStyle-CssClass="TableRow1"
        AllowSorting="True"  AllowPaging="true"   PageSize="4"  OnPageIndexChanged="OnPageIndexChanged" 
         OnCancelCommand="OnCancelCommand" OnEditCommand="OnEditCommand" OnUpdateCommand="OnUpdateCommand"  OnItemCommand="OnItemCommand" >
    <FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
    <ItemStyle ForeColor="Black" BackColor="#EEEEEE" HorizontalAlign="Center"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084" HorizontalAlign="Center"></HeaderStyle>
    <PagerStyle Visible="true" Height="30"  Font-Bold="true" Font-Size="26" HorizontalAlign="Center" Mode="NumericPages"></PagerStyle> 
    <Columns>
        <asp:TemplateColumn  >
                <ItemTemplate><input type="checkbox" runat="server"  id="chkSelect" onclick="AddRemoveValues(this)"  value='<%#DataBinder.Eval(Container.DataItem,"id")%>'/>
                </ItemTemplate>
            </asp:TemplateColumn> 
            <asp:BoundColumn DataField="account"  ReadOnly="True" HeaderText="帐号" >
            <HeaderStyle Wrap="False"></HeaderStyle>
            <ItemStyle Wrap="False"></ItemStyle>
        </asp:BoundColumn>
        
        <asp:BoundColumn DataField="name" ReadOnly="false" HeaderText="名字" >
            <HeaderStyle Wrap="False"></HeaderStyle>
            <ItemStyle Wrap="False"></ItemStyle>
        </asp:BoundColumn>
        
        <asp:BoundColumn DataField="state" ReadOnly="True" HeaderText="状态" >
            <HeaderStyle Wrap="False"></HeaderStyle>
            <ItemStyle Wrap="False"></ItemStyle>
        </asp:BoundColumn>
        
        <asp:BoundColumn DataField="admin_right" ReadOnly="True" HeaderText="权限" >
            <HeaderStyle Wrap="False"></HeaderStyle>
            <ItemStyle Wrap="False"></ItemStyle>
        </asp:BoundColumn>
        <asp:EditCommandColumn HeaderText="编辑" EditText="改名"  UpdateText="确定" CancelText="取消"  ButtonType="PushButton" >
        </asp:EditCommandColumn>
    </Columns>
    </asp:DataGrid> DBManage DB = new DBManage();
        Admin admin = new Admin();
        public int recordCount;
        public int pageCount;        SqlConnection conn;
        SqlCommand command;
        SqlDataAdapter adapter;
        SqlCommandBuilder builder;
        DataSet dataset;
        protected void Page_Load(object sender, EventArgs e)
        {
           
            adapter = DB.myDataAdapter(City56.SelectSql.All_Admin);
            dataset = new DataSet();
            try
            {
                DB.Open();
                adapter.Fill(dataset);
                recordCount = dataset.Tables[0].Rows.Count;
                //获取当前的页数
                pageCount = (int)((recordCount - 1 + PageSize) / PageSize);
                //ShowMessage.ShowAlert(pageCount.ToString());
                //避免纪录从有到无时,并且已经进行过反页的情况下CurrentPageIndex > PageCount出错
                if (recordCount == 0)
                {
                    this.All_Admin.CurrentPageIndex = 0;
                }
                else if (this.All_Admin.CurrentPageIndex >= PageCount)
                {
                    this.All_Admin.CurrentPageIndex = pageCount - 1;
                }
                foreach (DataRow dr in dataset.Tables[0].Rows)
                {
                    switch (dr[5].ToString())
                    {
                        case "1": dr[5] = "正常"; break;
                        case "2": dr[5] = "锁定"; break;
                        default: dr[5] = "未知"; break;
                    }
                    switch (dr[4].ToString())
                    {
                        case "0": dr[4] = "超级管理员"; break;
                        default: dr[4] = "普通管理员"; break;
                    }
                }
            }
            catch
            {
                Response.Write(e.ToString());
                return;
            }
            finally
            {
                DB.Close();
            }
            
             if(!Page.IsPostBack)
             { DataBind(); }
                    }
                public void DataBind()
        {
            All_Admin.DataSource = dataset;
            All_Admin.DataBind();
            NavigationStateChange();
        }        public void OnPageIndexChanged(object sendef, DataGridPageChangedEventArgs e)
        {
            All_Admin.CurrentPageIndex = e.NewPageIndex;
            DataBind();
        }
        public void OnItemCommand(object sendef, DataGridCommandEventArgs e)
        {        }
        public void OnUpdateCommand(object sendef, DataGridCommandEventArgs e)
        {
            DataRow dr = dataset.Tables[0].Rows[e.Item.ItemIndex];
            //ShowMessage.ShowAlert(e.Item.ItemIndex.ToString());
            dr["name"] = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
            //dr["name"] = ((TextBox)e.Item.FindControl("name")).Text.Trim();
            ShowMessage.ShowAlert(dr[3].ToString());
            //adapter = DB.myDataAdapter(City56.SelectSql.All_Admin);
            dataset.Tables[0].AcceptChanges();
            try
            {
                DB.Open();
                //ShowMessage.ShowAlert(dr[2].ToString());
                adapter.Update(dataset.Tables[0]);
                
                //if(adapter.ContinueUpdateOnError)
                //dr = dataset.Tables[0].Rows[e.Item.ItemIndex];
                //ShowMessage.ShowAlert(dr[3].ToString());
                //else ShowMessage.ShowAlert("Right") ;
            }
            catch(SqlException se) {
                ShowMessage.ShowAlert(se.ToString());
            }
            finally{
                DB.Close();
            }
            dataset.Tables[0].AcceptChanges();
            All_Admin.EditItemIndex = -1;
            DataBind();
        }

解决方案 »

  1.   

    用 sqlDataAdapter 更新数据库 要用到 SqlCommandBiulder  对象
    具体的 你可以找找帮助 
    或者给我发消息
      

  2.   

    太长了,没有仔细看。如果 adapter.update 不行,并且既然你的程序也只是改变一行而已,那么直接使用 dbcommand.executeNonQuery更新数据库就可以了。
      

  3.   

    这类问题,调试时的重点是要打印出 adapter 的 updateCommand 对象的属性来看看是否对。
      

  4.   

    好象有个小问题,这两句前后颠倒:dataset.Tables[0].AcceptChanges();
    adapter.Update(dataset.Tables[0]);
      

  5.   

    sqldataadapter对象以后,插入如下命令:
    SqlCommandBuilder objcmd=new SqlCommandBuilder(连接字符串)