问题描述
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一下。再重新构造要传的数据传过去就没问题了。
解决方案:
虽然没看懂,但我猜问题的的关键可能是清空的对象而不是清空的方法