单击另一个表单上的“保存”按钮后如何刷新以前的表单

时间:2015-05-25 17:57:03

标签: c# winforms datagridview

我正在尝试几个小时来弄清楚当我在Form2上保存数据时如何刷新以前的表单(Form1)。

我在Form1上使用 .container { position: relative; } .container .center { position: absolute; left: 50%; transform: translateX(-50%); /*add this if you want the element centered*/ -ms-transform: translateX(-50%); /* IE 9 */ -webkit-transform: translateX(-50%); /* Chrome, Safari, Opera */ } 以打开Form2,用户可以输入数据,到目前为止一切都很好。我想要的是:当用户点击保存按钮时,他保存的数据(插入到数据库中)在前一个表单(Form1)datagridview中可见,这是没有发生的。我正在使用下面的代码插入数据 - >

transform: translateX(-50%)

我一直在尝试使用btnAdd_Click但是没有用。 请提供一些提示。谢谢!

3 个答案:

答案 0 :(得分:0)

在创建Form2(例如05-25 10:43:11.929: D/AndroidRuntime(687): Shutting down VM 05-25 10:43:11.929: W/dalvikvm(687): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 05-25 10:43:12.069: E/AndroidRuntime(687): FATAL EXCEPTION: main 05-25 10:43:12.069: E/AndroidRuntime(687): java.lang.ClassCastException: com.example.cthulumanager.Card cannot be cast to java.lang.CharSequence 05-25 10:43:12.069: E/AndroidRuntime(687): at com.example.cthulumanager.HashArrayAdapter.getView(HashArrayAdapter.java:46) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.AbsListView.obtainView(AbsListView.java:2271) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.ListView.onMeasure(ListView.java:1156) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.View.measure(View.java:15172) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:602) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.View.measure(View.java:15172) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.View.measure(View.java:15172) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.View.measure(View.java:15172) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 05-25 10:43:12.069: E/AndroidRuntime(687): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.View.measure(View.java:15172) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.Choreographer.doFrame(Choreographer.java:525) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.os.Handler.handleCallback(Handler.java:615) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.os.Handler.dispatchMessage(Handler.java:92) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.os.Looper.loop(Looper.java:137) 05-25 10:43:12.069: E/AndroidRuntime(687): at android.app.ActivityThread.main(ActivityThread.java:4745) 05-25 10:43:12.069: E/AndroidRuntime(687): at java.lang.reflect.Method.invokeNative(Native Method) 05-25 10:43:12.069: E/AndroidRuntime(687): at java.lang.reflect.Method.invoke(Method.java:511) 05-25 10:43:12.069: E/AndroidRuntime(687): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 05-25 10:43:12.069: E/AndroidRuntime(687): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-25 10:43:12.069: E/AndroidRuntime(687): at dalvik.system.NativeStart.main(Native Method) )时将Form1的实例传递给Form2的构造函数,并将其存储在其构造函数内的Form2成员中(例如,作为Form2 form2 = new Form2(this);成员myForm1其中myForm1 = form1;是构造函数的参数)。然后拨打form1

答案 1 :(得分:0)

有很多方法可以跟踪其他表单,你可以将父表单作为参数传递给子表单的构造函数,你可以拥有父表单的属性等。

您还可以使用Application.OpenForms集合获取已打开的表单。

在您的情况下,您可以执行以下操作:

Form1 form1 = Application.OpenForms["Form1"] as Form1;
if(form1 != null) // found
{
   form1.RefreshMethod(); //call your public method from Form1 to refresh
}

IMO,更好的方法是将父表单作为参数传递给child的构造函数,但我也看到并使用了Application.OpenForms集合。

作为旁注,与您当前的问题无关,也使用@Codbagaj,'"+this.dataBilet.Text+ "的参数,不需要进行字符串连接,它将与使用参数而不是使用参数的良好实践保持一致字符串连接。

答案 2 :(得分:0)

最简单的方法是将“Form1”设置为您打开的表单的所有者(“AddData”表单),然后在用户关闭/按下按钮后从打开的表单中调用它。见例。

//Form1
public void RefreshWork()
{
// Do Something Here
}

btnAdd_Click(object sender, EventArgs e)
{
AddData TempForm = new AddData();
TempForm.Owner = this;
TempForm.ShowDialog();
}

// "AddData" form

AddData_FormClosing(object sender, EventArgs e)
{
((Form1)Owner).RefreshWork();
}