Form1传值Datable到Form2,怎么清空数据源?

问题描述

Form1定义的Datable传值到Form2的rfTable,然后再把数据源填充到dataGridView1里面,现在再操作第2次的时候,dataGridView1还会再次绑定第一次传过来的数据,当我关闭Form2的时候就清空rfTable,请问下怎么解决?publicpartialclassForm2:Form{//privateDataTabletd;publicForm2(DataTablerfTable){InitializeComponent();this.dataGridView1.DataSource=rfTable;}privatevoidForm2_Load(objectsender,EventArgse){//td=newDataTable();//td.Rows.Clear();}privatevoidbutton1_Click(objectsender,EventArgse){this.Close();//this.dataGridView1.DataSource=td;}

解决方案

解决方案二:
同样的问题,求大神回复,。。。。
解决方案三:
关闭的时候用rfTable.Clear();没法清空吗?
解决方案四:
引用2楼running_crazy的回复:

关闭的时候用rfTable.Clear();没法清空吗?

清空不了。百度了几种方法不可行。
解决方案五:
引用2楼running_crazy的回复:

关闭的时候用rfTable.Clear();没法清空吗?

这个怎么调用呢?rfTable在关闭事件点不出来。我刚接触C#不久,不是很懂
解决方案六:
现在再操作第2次的时候-》传递数据之前都把Dt给清空,再赋值。
解决方案七:
看你代码在构造函数里面进行了数据绑定,load事件里面只做了newdatatable,然后那句clear其实没必要,因为刚初始话的dt,本身就不会有数据,里面本来就是空的,另外你这里没有重新绑定数据,所以不会影响构造函数里面的绑定结果,然后你在click事件里面直接close了当前窗体,那后面那句就无效了,你要改成先绑再关闭,但因为马上就关闭了,你也看不到,至于清空什么的,看你意思应该是要在load事件里清空吧,那就直接claer,不要new
解决方案八:
引用5楼duanzi_peng的回复:

现在再操作第2次的时候-》传递数据之前都把Dt给清空,再赋值。

privatevoidtable_Click(objectsender,EventArgse){Null_table=newDataTable();Null_table.Rows.Clear();this.dataGridView2.DataSource=Null_table;...................................this.dataGridView2.DataSource=td.DefaultView;}privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){Form2f2=newForm3(fr2_table);f2.ShowDialog();}

也没有用啊,
解决方案九:
private void button1_Click(object sender, EventArgs e)        { this.dataGridView2.DataSource=null;            this.Close();            //this.dataGridView1.DataSource = td;        }
解决方案十:
引用6楼starfd的回复:

看你代码在构造函数里面进行了数据绑定,load事件里面只做了newdatatable,然后那句clear其实没必要,因为刚初始话的dt,本身就不会有数据,里面本来就是空的,另外你这里没有重新绑定数据,所以不会影响构造函数里面的绑定结果,然后你在click事件里面直接close了当前窗体,那后面那句就无效了,你要改成先绑再关闭,但因为马上就关闭了,你也看不到,至于清空什么的,看你意思应该是要在load事件里清空吧,那就直接claer,不要new

这样还是没有清空,publicForm2(DataTablerfTable){InitializeComponent();this.dataGridView1.DataSource=rfTable;}privatevoidForm2_Load(objectsender,EventArgse){}privatevoidbutton1_Click(objectsender,EventArgse){this.dataGridView1.DataSource=td;this.Close();}

解决方案十一:
引用8楼xiaoguidangjiajia的回复:

private void button1_Click(object sender, EventArgs e)        { this.dataGridView2.DataSource=null;            this.Close();            //this.dataGridView1.DataSource = td;        }

一开始我也是这么写,最后总结null然并卵
解决方案十二:
很简单的,ShowDialog出的窗体中可以调用他母窗体(Form1)的public方法进行清空母窗体中的dt数据,你在Form1中定义这样一个public方法就可以了。
解决方案十三:
this.dataGridView1.DataSource=td;改成:((DataTable)this.dataGridView1.DataSource).Clear();
解决方案十四:
引用11楼ajianchina的回复:

很简单的,ShowDialog出的窗体中可以调用他母窗体(Form1)的public方法进行清空母窗体中的dt数据,你在Form1中定义这样一个public方法就可以了。

publicvoidClearBtsTable(){tb.Rows.Clear();this.dataGridView1.DataSource=tb;}privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){this.ClearBtsTable();Form2f2=newForm3(fr2_table);f2.ShowDialog();}

也不行啊,是不是tb.Rows.Clear();不行?要for循环依个删除?
解决方案十五:
publicForm2(DataTablerfTable){InitializeComponent();this.dataGridView1.DataSource=rfTable;}你这个代码,不就是绑定传递进来的rttable吗,你每次打开窗体都把form1的datatable传递进来,当然每次都绑定了你第二次打开,传递个null进来,不就没有数据了不知道你为什么老纠结clear的问题datatable是引用类型,你把rfTable给clear掉的话,form1里的datatable也没有数据了
解决方案:
引用13楼baidu_31283421的回复:

Quote: 引用11楼ajianchina的回复:
很简单的,ShowDialog出的窗体中可以调用他母窗体(Form1)的public方法进行清空母窗体中的dt数据,你在Form1中定义这样一个public方法就可以了。

publicvoidClearBtsTable(){tb.Rows.Clear();this.dataGridView1.DataSource=tb;}privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){this.ClearBtsTable();Form2f2=newForm3(fr2_table);f2.ShowDialog();}

也不行啊,是不是tb.Rows.Clear();不行?要for循环依个删除?

你clear掉的是tb,而传递的是fr2_table,根本不是一个玩意
解决方案:
这种问题现场看全部代码,估计一会就解决的问题,然后让LZ这么绕来绕去,反而不知道楼主到底想干嘛了
解决方案:
this.dataGridView2.DataSource=Null_table;...................................this.dataGridView2.DataSource=td.DefaultView;这又是闹哪样你先赋值了个空数据源然后又把td.DefaultView给绑定上去了最终不还是绑定的td.DefaultView吗,不知道你到底想干啥
解决方案:
建议楼主先删掉乱七八糟的逻辑,理清思路之后,重新写个方法在原有的错误的代码基础上瞎改,只能是越改越乱
解决方案:
如果楼主连代码执行顺序还没搞清楚,建议恶补基础你把清空的代码写在最前面,有卵用?
解决方案:
我猜楼主的意思就是清空From1里面的datatable。而不是清空form2中dataGridView1的数据源。
解决方案:
引用19楼Z65443344的回复:

如果楼主连代码执行顺序还没搞清楚,建议恶补基础你把清空的代码写在最前面,有卵用?

思路不是很明确吗?只不过试了几个人的方法,把自己搞晕了。就是想publicForm2(DataTablerfTable)清空这个rfTable么
解决方案:
引用20楼xiaoguidangjiajia的回复:

我猜楼主的意思就是清空From1里面的datatable。而不是清空form2中dataGridView1的数据源。

如果是这样,那么代码应该这样写:首先必须定义个全局datatable对象来承接传递进来的datatable,否则局部变量一执行完,不没了?datatabledt;public Form2(DataTable rfTable)        {            InitializeComponent();            this.dataGridView1.DataSource = rfTable;dt=rfTable;        }然后你拖个按钮,里面写dt.rows.clear()就好了
解决方案:
引用21楼baidu_31283421的回复:

Quote: 引用19楼Z65443344的回复:
如果楼主连代码执行顺序还没搞清楚,建议恶补基础你把清空的代码写在最前面,有卵用?

思路不是很明确吗?只不过试了几个人的方法,把自己搞晕了。就是想publicForm2(DataTablerfTable)清空这个rfTable么

你在这里清空,思路完全错误.你清空了,那么你form2里表格显示啥呀?要么就等窗口关闭时清空,不能在显示的时候就清空啊代码22#已经给你了,你保存好datatable的句柄,别丢弃了,然后去操作它就行了
解决方案:
就是打开form2窗口都重新加载一次,我现在的问题就是累加数据,
解决方案:
或者,如果你就是想窗体关闭就清空表,有个更简单的办法privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){this.ClearBtsTable();Form2f2=newForm3(fr2_table);f2.ShowDialog();//既然是模态窗体,那么会阻塞在这里,直到窗体关闭,你在这之后清空不就得了fr2_table.Rows.Clear();}
解决方案:
其实无非就是看楼主想清空哪一个页面的数据。如果是from2:privatevoidbutton1_Click(objectsender,EventArgse){this.dataGridView2.DataSource=null;this.Close();//this.dataGridView1.DataSource=td;}如果是from1:privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){this.ClearBtsTable();Form2f2=newForm3(fr2_table);f2.ShowDialog();//既然是模态窗体,那么会阻塞在这里,直到窗体关闭,你在这之后清空不就得了fr2_table.Rows.Clear();}
解决方案:
引用25楼Z65443344的回复:

或者,如果你就是想窗体关闭就清空表,有个更简单的办法privatevoidlinkLabel2_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){this.ClearBtsTable();Form2f2=newForm3(fr2_table);f2.ShowDialog();//既然是模态窗体,那么会阻塞在这里,直到窗体关闭,你在这之后清空不就得了fr2_table.Rows.Clear();}

fr2_table.Rows.Clear();写在ShowDialog就行了恩,基础太差了。谢谢教诲
解决方案:
呵呵,明明自己的失误,搞半天在这儿Form2f2=newForm3(fr2_table);你分明是一个Form3的实例,在Form2里搞半天。你这代码还是不能用的,你要在fr2_table.Rows.Clear();之前,在Form2里建一个datatable的实例,然后将fr2_table副本赋值给他,再清除fr2_table,否则你dataGridView1显示不了数据的。
解决方案:
引用28楼ajianchina的回复:

呵呵,明明自己的失误,搞半天在这儿Form2f2=newForm3(fr2_table);你分明是一个Form3的实例,在Form2里搞半天。你这代码还是不能用的,你要在fr2_table.Rows.Clear();之前,在Form2里建一个datatable的实例,然后将fr2_table副本赋值给他,再清除fr2_table,否则你dataGridView1显示不了数据的。

这应该是笔误吧,否则能编译过去?
解决方案:
当然,除非form3继承自form2,这语法才能成立不过以楼主的水平,我估计是不会写出这样的代码来
解决方案:
问题应该出在你的form1里,数据从那边传过来的,跟form2没关系
解决方案:
引用31楼dongxinxi的回复:

问题应该出在你的form1里,数据从那边传过来的,跟form2没关系

其实从哪里清空都可以想从form1里清,就从form1里清,想从form2里清,就从form2里清,这是设计上的考虑,不是非要在form1里才算正确的当然如果就是想简单的实现form2一关闭就清空,代码写在form1里会更简单但是如果form2不是模态窗体,那么还是得拿回到form2里做清空操作,或者在form2显示的时候先建立副本,然后直接清空原始表
解决方案:

解决方案:
我觉得楼主还真是要理清思路,大家都说的很明白了。你传过去的数据,第一次是正确的,证明你传值以及绑定这些都没问题。第二次传值的时候,数据重复了。那就在传值之前,将要传递的Table数据Clear一下。再重新构造要传的数据传过去就没问题了。
解决方案:
虽然没看懂,但我猜问题的的关键可能是清空的对象而不是清空的方法

时间: 2024-10-31 18:00:52

Form1传值Datable到Form2,怎么清空数据源?的相关文章

C#中Form1的菜单要直接关联Form2菜单的功能,该怎么办?

问题描述 Form1中Menu1,Form2中Menu2:Form2的menu2_click事件已经定义好了,现在我想让Form1的Menu1_click事件具有Form2中菜单点击的效果,又不想重写代码,能不能通过事件委托之类的方法来解决?请各位大大指教啊,谢谢! 解决方案 解决方案二:简单的方法:将FORM2的引用传给FORM1,将FORM2中的CLICK事件写个PUBLIC的方法,在FORM1中调用.解决方案三:楼上的大大,是用EventHandler来传递么?能不能具体点,我对事件传递不

用form1中的notifyicon调用form2

问题描述 我想在form1中用notifyicon调用form2,在右击notifyicon设置的图像时显示form2应如何设置?

C# Winform窗体间传值

1.通过构造函数 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 int value1; string value2; public Form2 ( int value1 , string value2 ) {     InitializeComponent ( );     this.value1 = value1;     this.value2 = value2; } 在窗体Form1中这样调用 new Form2 ( 111 , "222"

C# winform 传值

问题描述 两个同级子窗体间怎么传值?(都是从同一个窗体中的button中打开的)现在有个思路是通过父窗体作中介传给对方.感觉很麻烦有没有更好的办法能传值?最好是能附上代码.谢谢各位大神 解决方案 解决方案二:通过事件:窗体1的事件A+=窗体2的处理A解决方案三:构造函数传值,或者在要打开的窗体建一个字段,然后赋值解决方案四:你想怎么传,做什么没说清楚解决方案五:既然都是从同一个窗体中的button中打开的,可以在父窗体中设全局静态变量啊,两个字窗体都可以直接操作这个值啊.解决方案六:通过事件传递

WinForm窗体显示和窗体间传值总结

WinForm 2009-02-10 10:47:47 阅读50 评论0 字号:大中小 A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 两者具体区别如下: 1.在调用Form.Show方法后,Show方法后面的代码会立即执行 2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 3.当窗体显示为模式窗体时,单击"关闭"按钮会隐藏窗

JavaScript实现同一页面内两个表单互相传值的方法_javascript技巧

本文实例讲述了JavaScript实现同一页面内两个表单互相传值的方法.分享给大家供大家参考.具体如下: 有时候我们在提交表单的时候需要将两个表单的值互相传递,那么如何实现呢?其实很简单,就是用JavaScrip获取任一表单的值,然后赋给另一个,具体可看代码,代码很有意思,也很实用. 运行效果截图如下: 具体代码如下: <html> <head> <title>JavaScript同一页面两个表单互相传值</title> <meta http-equi

vb net-Form1中双击文本框弹出Form2的datagridview双击选择获得CELL值后Form2退出

问题描述 Form1中双击文本框弹出Form2的datagridview双击选择获得CELL值后Form2退出 目标是:Form1的文本框Textbox1 获得 Form2的datagridview1 的选取CELL值. 过程: 1.双击Form1中的Textbox1弹出Form2 2.在Form2中的datagridview1中双击选取值后关闭Form2 思路: A. 文本框双击:Private Sub TB2sl_DoubleClick(ByVal sender As Object, ByV

DotNet Form间数据传递

数据 1.WebForm 利用System.Web Namespace 中 HttpResponse Class的Redirect方法传递,HttpRequest Class的 QueryString方法接收 传递来源类webform1 中的某个方法里 使用               Response.Redirect ("WebForm2.aspx?s=1&ss=11");               //HttpResponse 类的方法和属性通过 ASP.NET 的内部

简单的添加窗体,送分!

问题描述 请问:如何当单击添加按钮时弹出listbox1对话框并可添加对象? 解决方案 解决方案二:自己顶一下先了!解决方案三:再顶!解决方案四:当前窗口Form1弹出窗口Form2里的listBox3.Items.AddRange(form1.listBox1.Items)这样就把listBox1里的项浅拷贝到了listBox3.如果在form2里既可以增加项,也可以删除项,则关闭form2时,listBox1.Items.Clear();listBox1.Items.AddRange(for