问题 将数据从Unbound DataGridView保存到Sql Server 2005,然后绑定到记录

ahmed_one

成员
已加入
2012年11月29日
留言内容
23
编程经验
Beginner
大家好,

我是C#的新手,我的开发环境是:

Visual Studio 2010旗舰版
Sql Server 2005
编程语言C#**

我有一个带有Unbound Datagridview的窗体,该窗体通过循环For ..将数据从中保存到Sql Server2005。每当用户单击“保存”按钮时都没有问题,并传递SQL INSERT语句。

现在,我需要的是一种方法,对于相同的“保存”按钮,如果将数据保存在Sql Server中,则DataGridView将绑定到该记录,因此,如果用户要更新/删除/添加数据,他/她只需要再次编辑数据即可。按保存按钮。所有记录将共享相同的唯一ID。这是一个产品数据库,当用户单击“保存”时,它将为用户保存时输入的所有产品生成一个相同的交易ID。因此,我认为我需要生成一个Select语句并通过该唯一ID检索用户保存的所有那些记录,然后如何将其绑定到DataGridView数据源以及如何通过SqlAdapter或其他方法进行更新/删除?

谢谢和最好的问候

艾哈迈德
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
那只是做事情的一种非常非常糟糕的方式。只需从一开始就绑定网格。这样,您只需要一个例程即可保存数据。不管数据是新的还是现有的。您只需在数据适配器上调用更新,任何更改(插入,更新和删除)都将保存到数据库中。
 

ahmed_one

成员
已加入
2012年11月29日
留言内容
23
编程经验
Beginner
Re:将数据从Unbound DataGridView保存到Sql Server 2005,然后绑定到记录C#

你好,


非常感谢您的答复。...实际上,我需要使用“未绑定”表单来执行此操作,以免对网络造成沉重负担,比方说,如果应用程序使用datagridview且有50个以上的用户,则不受限制DataGridView将更多的负载推向服务器吗?



1.将数据从未绑定的DataGridView保存到Sql Server(完成了)。
现在数据已保存在Sql Server中,并且包含DataGridView的窗体显示了刚刚保存的那些记录,如果用户尝试添加/编辑/更新/删除操作,它将不会执行此操作,而是将这些数据再次保存为新数据记录,这将造成适当的产品重复记录。


2.假设用户使用DataGridView输入4或5个产品详细信息,在用户保存数据后(在第1步中),我需要将这4-5个记录绑定到datagridview,以便用户可以添加/编辑/更新/删除这些记录。保存操作后立即可用。


希望这次我能更清楚地说明我的问题,如果您能在此方面给我帮助,我将不胜感激。


谢谢并恭祝安康


艾哈迈德
 

ahmed_one

成员
已加入
2012年11月29日
留言内容
23
编程经验
Beginner
Re:将数据从Unbound DataGridView保存到Sql Server 2005,然后绑定到记录C#

绑定纯粹是一个UI功能,对网络流量或其他任何因素都无效。正在检索&保存数据与数据绑定绝对没有直接关系。

非常感谢您的答复,好吧,我们可以说使用以下代码在表单加载事件中将DataGridView绑定到数据库:

connectionString = ConfigurationManager.AppSettings["connectionString"];
sqlConnection = new SqlConnection(connectionString);
sqlConnection.Open();

command = new SqlCommand("Select ProductName, QuantityPerUnit, UnitPrice from Products", sqlConnection);
           
sqlDataAdapter = new SqlDataAdapter(command);
sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);


   BindingSource bs = new BindingSource();
   DataTable dt = new DataTable();
   DataSet ds = new DataSet();
   sqlDataAdapter.Fill(ds,"Products");
            
   bs.DataSource = ds;

   dgInvDet.DataSource = bs;


代码确实将datagridview绑定到数据库并显示基于我提到的Sql Query的记录,现在我该怎么做才能向用户显示带有空白DataGridView的新表单,以便用户可以在屏幕上显示以进行新输入?

希望能早日得到你的回复。

艾哈迈德
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
当您调用Fill时,它将使用查询的结果集填充DataTable。如果您想将架构(即列等)添加到DataTable中而不是数据中,请改为调用FillSchema。

顺便说一句,您正在创建一个DataTable和一个DataSet,然后仅使用该DataSet。两者都没有意义,因为当您调用Fill时,无论如何都是在DataSet中创建一个DataTable。问题是,如果您使用的只是一个DataTable,那么DataSet毫无意义。完全摆脱您的数据集。只需创建DataTable并在调用Fill或FillSchema时将其传递,然后将其用作数据源即可。
 

ahmed_one

成员
已加入
2012年11月29日
留言内容
23
编程经验
Beginner
Re:将数据从Unbound DataGridView保存到Sql Server 2005,然后绑定到记录C#

当您调用Fill时,它将使用查询的结果集填充DataTable。如果您想将架构(即列等)添加到DataTable中而不是数据中,请改为调用FillSchema。

顺便说一句,您正在创建一个DataTable和一个DataSet,然后仅使用该DataSet。两者都没有意义,因为当您调用Fill时,无论如何都是在DataSet中创建一个DataTable。问题是,如果您使用的只是一个DataTable,那么DataSet毫无意义。完全摆脱您的数据集。只需创建DataTable并在调用Fill或FillSchema时将其传递,然后将其用作数据源即可。

非常感谢您的帮助和支持,FillSchema方法是否支持Update / Delete方法?如果我转换:

sqlDataAdapter.Fill(ds,"Products");to

sqlDataAdapter.Fill(ds,SchemaType.Source,"Products");

我可以通过与Fill方法相同的方式传递sqlDataAdapter.Update(ds)吗?

谢谢

艾哈迈德
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
我不是那个意思我说过调用FillSchema而不是Fill,但是您仍在调用Fill。

另外,无论您调用Fill还是FillSchema,都与是否可以更新或删除无关。 Fill和FillSchema之间唯一的区别是Fill用查询的结果集填充DataTable,而FillSchema则没有。这就对了。之后,您对DataTable所做的操作完全不受影响。显然,如果DataTable不包含任何数据,则您将无法编辑或删除任何记录,但是无论是调用FillSchema还是调用Fill都属于这种情况,查询不返回任何记录。

当您并非如此时,您实际上是在尝试使其困难。照我说的去做,别无其他。调用FillSchema而不是Fill,其他都不会改变。
 

ahmed_one

成员
已加入
2012年11月29日
留言内容
23
编程经验
Beginner
我不是那个意思我说过调用FillSchema而不是Fill,但是您仍在调用Fill。

另外,无论您调用Fill还是FillSchema,都与是否可以更新或删除无关。 Fill和FillSchema之间唯一的区别是Fill用查询的结果集填充DataTable,而FillSchema则没有。这就对了。之后,您对DataTable所做的操作完全不受影响。显然,如果DataTable不包含任何数据,则您将无法编辑或删除任何记录,但是无论是调用FillSchema还是调用Fill都属于这种情况,查询不返回任何记录。

当您并非如此时,您实际上是在尝试使其困难。照我说的去做,别无其他。调用FillSchema而不是Fill,其他都不会改变。

抱歉,这是拼写错误...我正在调用FillSchema方法。
 
最佳 底部