C# 使用2对话框表单删除数据
您好,我对“从2个表单中删除数据”对话框有疑问C# 使用2对话框表单删除数据,c#,dialog,C#,Dialog,您好,我对“从2个表单中删除数据”对话框有疑问 在第一个dialogform中,它包含数据列表,在第二个dialogform中,它包含数据细节和删除按钮。。。我已经成功地删除了数据库中的数据,但我不知道如何从列表中删除数据 如果只是选择数据和删除我知道这是可以用这个代码 quizzes.RemoveAt(listBoxQuizzes.SelectedIndex); Global.deleteData("DELETE FROM Quiz_Occurrences WHERE ID = " + id
在第一个dialogform中,它包含数据列表,在第二个dialogform中,它包含数据细节和删除按钮。。。我已经成功地删除了数据库中的数据,但我不知道如何从列表中删除数据 如果只是选择数据和删除我知道这是可以用这个代码
quizzes.RemoveAt(listBoxQuizzes.SelectedIndex);
Global.deleteData("DELETE FROM Quiz_Occurrences WHERE ID = " + id);
但dialogform1中的问题不可用按钮删除,只需查看详细信息数据。所以,如果用户想要删除数据,他必须打开对话框Form2(详细数据)
我已经用这段代码删除了数据库中的数据
quizzes.RemoveAt(listBoxQuizzes.SelectedIndex);
Global.deleteData("DELETE FROM Quiz_Occurrences WHERE ID = " + id);
并通过关闭detaildataform(dialogform2)
并移动到dialogform1(listdatabox)
这里的问题是,我刚才删除的数据仍然在那里,因为它仍然没有被删除(已经从数据库中删除,但没有从列表中删除)。并且需要重新启动程序以查看删除数据的效果
更新进度 我将数据更改为全局变量,因此从技术上讲,我可以删除dialogform2中的数据
这是代码(dialogform1中的修饰符列表框) 如果我想从dialogform1中删除它,我可以使用
Global.quizOccurrences.removeAT(listBoxQuizzes.SelectedIndex);
但是如果我想从dialogform2中删除它
Global.quizOccurrences.removeAT(.........); //still not have idea how can i reference index
更新@nitin的解决方案 首先我用formdialog2写
public Frmdialog1 frm_dialog { get; set; }
然后我用formdialog1写下这个
frmdialog2.frm_dialog=this;
然后再次返回formdialog1进行写入
frm_dialog.quizzes.RemoveAt(frm_dialog.listBoxQuizzes.SelectedIndex);
这是因为如果从第一个对话框打开第二个对话框,我会遇到很多错误,,您可以在
Frmdialog2
中使用类似的属性
public Frmdialog1 frm_dialog { get; set; }
在Frmdialog1
中创建Frmdialog2
的对象后,可以将此属性设置为
frmdialog2.frm_dialog=this;
现在,在从数据库中删除记录后,您可以在Frmdialog2
iteself中从此列表框中删除项,如下所示:
frm_dialog.quizzes.RemoveAt(frm_dialog.listBoxQuizzes.SelectedIndex);
注意:您的
列表框的修饰符应该是public
form1可以是form2关闭事件的子项
内表1
form2 f2dialog = new form2(/*I guess you are passing data here*/);
f2.dialog.Closing += eventhandler;
其他地方
void eventhandler(object sender, eventargs e)
{
//refresh globaldata since by now you have ran delete query
//rebind or call listbox.items.refresh() or both <-------------this how do you get data from rver? the server is updated but does global know that?
}
每次更改数据库时都必须手动重置此项
数据绑定并不像你想象的那么聪明。在问了很多关于这个话题的不同问题后,我终于可以随心所欲了
首先,我尝试将var更改为global,这样我就可以从dialogform2中删除listboxdialogform1中的数据(我认为这是最简单的方法)
然后在dialogform2中,将Global.quizOccurrences数据与日期和时间详细信息数据匹配(使用list和foreach)
List matchData=new List();
foreach(CQuizOccurrence myQuizOccurrence in Global.quizOccurrences)
{
DateTime dtDatabase=(DateTime)myQuizOccurrence.Occurrence;
字符串dt=dtDatabase.ToString();
如果(dt==日期发生){
matchData.Add(myQuizOccurrence);
}
}
foreach(匹配数据中的CQuizOccurrence myQuizOccurrence)
{
全局.quizoccurrence.Remove(myQuizOccurrence);
}
//调用formdialog1的函数show dialog
您是否使用数据集或其他东西在表单之间耦合数据没有……我只是使用简单的sql在表单2中加载详细数据您显示的代码对数据库没有任何作用。要在表单之间进行通信,可以使用事件(form1订阅form2,反之亦然)。还可以使用数据绑定、ADO、数据库类型(即sqlserver或SQL Server)标记您的问题mysql@RadioSpace是的,这是因为我已经完成了删除数据库中的数据…我所需要的就是从ListBox中删除数据。您能不能试着让您的问题更清楚一些?我不确定您的问题是什么(您是否遇到错误?这是一个体系结构问题吗?)。在dialogForm1中,我有属性frmdialog2,但在dialogform2中,我也有属性FRMDialog1,您确定您的代码(我指的是名称formdialog1和2)因为我混淆了…如果这个代码正确,那么它都在dialogform1中,对吗?我假设你只有两个对话框,并且给出了名称accordingly@RadioSpace你们能举个例子说明为什么公共修饰符不适合OOP吗?我在这里还是新手…从一开始(我的pathner处理这个项目)修改器列表框就已经存在了public@Katik这只是个问题。有些人可能会说,不应该将内部字段暴露给外部。或者换一种说法,只有form1应该知道列表框。虽然我总是说“一切可行!”。原谅我,但我真的很难理解你的解决方案…你能提供更多细节吗?你知道当你稍后运行删除查询操作拼写错误修复程序时,你在全局中的数据是否发生了变化吗
listbox.datacontext = Global.GetData();//or however this is done
//in dialog form1
foreach (CQuizOccurrence myQuizOccurrence in Global.quizOccurrences) {
//load data from Global.quizOccurences
}
//call function close to close dialogform1
List<CQuizOccurrence> matchData = new List<CQuizOccurrence>();
foreach (CQuizOccurrence myQuizOccurrence in Global.quizOccurrences)
{
DateTime dtDatabase = (DateTime)myQuizOccurrence.occurred;
string dt = dtDatabase.ToString();
if (dt == dateOccur) {
matchData.Add(myQuizOccurrence);
}
}
foreach (CQuizOccurrence myQuizOccurrence in matchData)
{
Global.quizOccurrences.Remove(myQuizOccurrence);
}
//call function show dialog for formdialog1