尝试在WinForm应用程序中维护DataSet

时间:2009-08-05 20:03:14

标签: c# .net vb.net winforms dataset

由于断线原因,我正在将内部网络应用转换为 winform 应用,我遇到了以下问题。

在webapp上的Function SaveMe()中,Person.ascx.vb页面上有以下代码 - >

        //get dataset from session
        Dim dsPerson As Data.DataSet = CType(Session.Item("Person" & Me.UniqueID), DataSet)
        //if no rows in dataset, add
        If dsPerson.Tables(0).Rows.Count = 0 Then
            Dim rowPerson As Data.DataRow = dsPerson.Tables(0).NewRow
            dsPerson.Tables(0).Rows.Add(FillPersonRow(rowPerson))
        Else
        //otherwise update
        ....more code here

我坚持的部分是如何在WinForm应用程序上逻辑创建数据集?

我应该抓取所有字段并将它们放入DataSet吗?如何(这是我在等待来自 SO 的建议时将要研究/尝试的内容)?


修改

会话正在LoadMe() Sub中创建/填充,就像这样 - >

        //load person
        Dim dsTemp As Data.DataSet = BLL.Person.GetPerson(PersonID)
        //save to session state
        Session.Add("Person" & Me.UniqueID, dsTemp)

修改

我要做的是创建一个表单级变量 - > private DataSet _personInfo;要将DataSet保存在我的FormPaint(int personID)中,我会调用以下内容:

            _personInfo = ConnectBLL.BLL.Person.GetPerson(personID);

然后我用它来填充表单上的各个字段。

接下来,在btnUpdate_Click()上,我尝试以下但无济于事:

       void btnUpdate_Click(object sender, EventArgs e)
    {
        var areChanges = _personInfo.HasChanges();
        if (areChanges)
        {
            var whatChanged = _personInfo.GetChanges();
            var confirmChanges =
                MessageBox.Show(
                    "Are you sure you want to make these changes: " +
                    whatChanged.Tables[0].Rows[0].ItemArray.ToString(), "Confirm Member Info Changes",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Hand);
            if (confirmChanges == DialogResult.Yes)
            {
                _personInfo.AcceptChanges();
                ConnectBLL.BLL.Person.Update(_personInfo);
            }
        }

        FormPaint(HUD.PersonId);
    }

我不清楚我做错了什么?我错过了一步吗?

谢谢

3 个答案:

答案 0 :(得分:3)

首先,

如果你想对Jacob提出的问题有一个很好的解释,请阅读以下文章......

http://www.knowdotnet.com/articles/datasetmerge.html

我同意其他人的意见,你似乎正在努力使它变得更难。

您不清楚ConnectBLL类是什么...是自定义商务对象还是强类型数据集。

要进行自动保存的数据绑定将是一个非常长的帖子,所以代替这里有几个链接。

http://www.codeguru.com/columns/vb/article.php/c10815
http://support.microsoft.com/kb/313482
http://msdn.microsoft.com/en-us/library/aa984336(VS.71).aspx

这是我在google上使用的第一个链接(使用强类型数据集的winforms数据绑定的分步指令)作为搜索字符串。你可能会找到一个更好的。 codeguru链接看起来很不错。另一个是以更加技术化为代价的更彻底。

最重要的是......如果你可以参加winforms开发中的Chris Sells书,那么关于数据绑定的章节非常出色(以及所有其他章节。)

http://www.amazon.com/Windows-Forms-Programming-Microsoft-Development/dp/0321267966/ref=sr_1_1?ie=UTF8&qid=1249525202&sr=8-1

希望这有帮助。

答案 1 :(得分:1)

在该片段中,DataSet来自会话。什么时候设置?

您当然可以在WinForms应用程序中使用DataSet。是数据绑定,你遇到了麻烦吗?

答案 2 :(得分:1)

你的问题可能在这里:

 if (confirmChanges == DialogResult.Yes)
 {
      _personInfo.AcceptChanges();
      ConnectBLL.BLL.Person.Update(_personInfo);
 }

AcceptChanges在准备更新的所有行上将RowState设置为Unchanged。坦率地说,使用whatChanged可能会更好,因为这样可以让你的适配器不必重新检查更改的行。

 if (confirmChanges == DialogResult.Yes)
 {
      ConnectBLL.BLL.Person.Update(whatChanged);
      _personInfo.AcceptChanges();
 }