Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用2对话框表单删除数据_C#_Dialog - Fatal编程技术网

C# 使用2对话框表单删除数据

C# 使用2对话框表单删除数据,c#,dialog,C#,Dialog,您好,我对“从2个表单中删除数据”对话框有疑问 在第一个dialogform中,它包含数据列表,在第二个dialogform中,它包含数据细节和删除按钮。。。我已经成功地删除了数据库中的数据,但我不知道如何从列表中删除数据 如果只是选择数据和删除我知道这是可以用这个代码 quizzes.RemoveAt(listBoxQuizzes.SelectedIndex); Global.deleteData("DELETE FROM Quiz_Occurrences WHERE ID = " + id

您好,我对“从2个表单中删除数据”对话框有疑问
在第一个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