VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 800|回复: 8

datagrid更新数据错误,c#,vs,内附代码~~高手指点下!

[复制链接]

1

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-28 10:00:02 | 显示全部楼层 |阅读模式
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace WebApplication1
{
        /// <summary>
        /// WebForm4 的摘要说明。
        /// </summary>
        public class WebForm4 : System.Web.UI.Page
        {
                protected System.Web.UI.WebControls.DataGrid Grid1;
                string strConnection;
                SqlConnection nwConn;
                SqlDataAdapter shipperAdapter;
                string queryStr;
                DataSet shipperSet=new DataSet();
                private void Page_Load(object sender, System.EventArgs e)
                {
                        // 在此处放置用户代码以初始化页面
                        ConnectData();
                        //string
                        queryStr="select * from shippers";
                        shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
                        shipperAdapter.Fill(shipperSet, "shippers");
                        if(!Page.IsPostBack)
                        {
                                this.BindGrid();
                                       
                        }
               
                }
                private void ConnectData()
                {
                        string strConnection=System.Configuration.ConfigurationSettings.AppSettings["connstr"];
                        SqlConnection nwConn=new SqlConnection(strConnection);
                       
                }
                private        void BindGrid()
                {
                       
                        this.Grid1.DataSource=shipperSet;
                        Grid1.DataBind();
                }
          

                #region Web 窗体设计器生成的代码
                override protected void OnInit(EventArgs e)
                {
                        //
                        // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                        //
                        InitializeComponent();
                        base.OnInit(e);
                }
               
                /// <summary>
                /// 设计器支持所需的方法 - 不要使用代码编辑器修改
                /// 此方法的内容。
                /// </summary>
                private void InitializeComponent()
                {   
                        this.Grid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Grid1_CancelCommand);
                        this.Grid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Grid1_EditCommand);
                        this.Grid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Grid1_UpdateCommand);
                        this.Grid1.Load += new System.EventHandler(this.Page_Load);
                        this.Load += new System.EventHandler(this.Page_Load);

                }
                #endregion

                private void Grid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
                {
                        this.Grid1.EditItemIndex=e.Item.ItemIndex;
                        this.BindGrid();
                }

                private void Grid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
                {
                        int rowCount=e.Item.ItemIndex;
                        TextBox tbox=(TextBox)e.Item.FindControl("CompanyNameBox1");
                        shipperSet.Tables["Shippers"].Rows[rowCount]["CompanyName"]=tbox.Text;
                        tbox=(TextBox)e.Item.FindControl("PhoneBox1");
                        shipperSet.Tables["Shippers"].Rows[rowCount]["Phone"]=tbox.Text;
                        this.ConnectData();
                        SqlCommandBuilder updateBuilder=new SqlCommandBuilder(shipperAdapter);
                        shipperAdapter.UpdateCommand=updateBuilder.GetUpdateCommand();
                        shipperAdapter.Update(shipperSet,"shippers");
                        shipperSet.Clear();
                        shipperAdapter.Fill(shipperSet,"shippers");
                        this.BindGrid();
                }

                private void Grid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
                {
                        this.Grid1.EditItemIndex=-1;
                        this.BindGrid();
                }
        }
}


//调试时候异常详细信息: System.InvalidOperationException: Fill:SelectCommand.Connection 属性尚未初始化
回复

使用道具 举报

0

主题

60

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-9-28 12:30:01 | 显示全部楼层
ConnectData();
                        //string
                        queryStr="select * from shippers";
                        shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
                        shipperAdapter.Fill(shipperSet, "shippers");

这些代码放到


private        void BindGrid()
                {

                            这里来
                       
                        this.Grid1.DataSource=shipperSet;
                        Grid1.DataBind();
                }

回复

使用道具 举报

1

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-9-28 13:30:01 | 显示全部楼层
回一楼的大哥,我试了,还是不行,运行时候还是
Fill: SelectCommand.Connection 属性尚未初始化。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: Fill: SelectCommand.Connection 属性尚未初始化。

源错误:


行 34:                         queryStr="select * from shippers";
行 35:                         shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
行 36:                         shipperAdapter.Fill(shipperSet, "shippers");
行 37:                          if(!Page.IsPostBack)
行 38:                         {


源文件: c:\inetpub\wwwroot\webapplication1\webform3.aspx.cs    行: 36

堆栈跟踪:


[InvalidOperationException: Fill: SelectCommand.Connection 属性尚未初始化。]
   System.Data.Common.DbDataAdapter.GetConnection(IDbCommand command, String method)
   System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
   WebApplication1._WebForm3.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\webapplication1\webform3.aspx.cs:36
   System.Web.UI.Control.OnLoad(EventArgs e)
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Page.ProcessRequestMain()




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
回复

使用道具 举报

0

主题

60

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-9-28 15:00:01 | 显示全部楼层
你没按照我叫你的做啊


ConnectData();
                        //string
                        queryStr="select * from shippers";
                        shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
                        shipperAdapter.Fill(shipperSet, "shippers");
放到那个函数里去
回复

使用道具 举报

0

主题

60

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-9-28 15:30:01 | 显示全部楼层
private void Grid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
                {
                        int rowCount=e.Item.ItemIndex;
                        TextBox tbox=(TextBox)e.Item.FindControl("CompanyNameBox1");
                        shipperSet.Tables["Shippers"].Rows[rowCount]["CompanyName"]=tbox.Text;
                        tbox=(TextBox)e.Item.FindControl("PhoneBox1");
                        shipperSet.Tables["Shippers"].Rows[rowCount]["Phone"]=tbox.Text;
                        this.ConnectData();
                        SqlCommandBuilder updateBuilder=new SqlCommandBuilder(shipperAdapter);
                        shipperAdapter.UpdateCommand=updateBuilder.GetUpdateCommand();
                        shipperAdapter.Update(shipperSet,"shippers");
                        shipperSet.Clear();
                        shipperAdapter.Fill(shipperSet,"shippers");
                        this.BindGrid();
                }
这个更新的做法也不妥,一般取主键更新,而不是更新DATASET
回复

使用道具 举报

1

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-9-28 21:15:01 | 显示全部楼层
private        void BindGrid()
                {   ConnectData();
                        queryStr="select * from shippers";
                        shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
                        shipperAdapter.Fill(shipperSet, "shippers");
                        this.Grid1.DataSource=shipperSet;
                        Grid1.DataBind();
                }
//RE:3521565兄,
这样子放??还是不行哦~~~



异常详细信息: System.InvalidOperationException: Fill: SelectCommand.Connection 属性尚未初始化。

源错误:


行 49:                         queryStr="select * from shippers";
行 50:                         shipperAdapter=new SqlDataAdapter(queryStr,nwConn);
行 51:                         shipperAdapter.Fill(shipperSet, "shippers");
行 52:                         this.Grid1.DataSource=shipperSet;
行 53:                         Grid1.DataBind();

回复

使用道具 举报

0

主题

12

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-9-28 21:30:02 | 显示全部楼层
你这样更新不太好!
一般取主键更新,也就是执行SQL  Update....
回复

使用道具 举报

0

主题

12

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-9-28 22:00:01 | 显示全部楼层
异常详细信息: System.InvalidOperationException: Fill: SelectCommand.Connection 属性尚未初始化。

=========

都给你说了,SelectCommand.Connection 属性尚未初始化
就是说没有得到值!

建议理清楚逻辑关系后重新调整程序结构!
回复

使用道具 举报

1

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-9-28 23:45:01 | 显示全部楼层
不好意思,我刚学的,
    那有什么方法,初始化SelectCommand.Connection 属性吗>?
---最好写出代码啦 ,谢谢~!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表