由于断线原因,我正在将内部网络应用转换为 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);
}
我不清楚我做错了什么?我错过了一步吗?
谢谢
答案 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书,那么关于数据绑定的章节非常出色(以及所有其他章节。)
希望这有帮助。
答案 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();
}