C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改相关的知识,希望对你有一定的参考价值。

如何实现?

我写好了,以下是截图,完整源码在附件中,有问题欢迎追问。

1.单击任意单元格


2.弹出修改对话框,输入新值,单击修改按钮,对话框自动关闭


3.修改成功了


参考技术A 通过datagridview双击事件实现获取datagridview数据,代码如下:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)


// 取得当前单元格内容
Console.WriteLine(DataGridView1.CurrentCell.Value);
// 取得当前单元格的列 Index
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);
// 取得当前单元格的行 Index
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);

参考技术B 这个很简单!
我只讲思路!
1:通过鼠标单击选中某行数据触发datagridview的行选中事件,得到选中的这行数据!
2:在B窗体里面你可以通过构造方法在实例化B窗体对象的时候将选中的行数据传递到B窗体。
3:接下来就是给B窗体里面的控件赋值!至于怎么修改这条数据我想这个你应该会了吧!
4:再不明白就加我QQ657236296我给你代码吧追问

能不能给我个代码看看,我想学习一下

追答

string sID = dgvDsp.SelectedRows[0].Cells[0].Value.ToString();
这个是选中datagridview行获取它的ID的代码,只要怎么获取其它的数据我想就很简单了吧
接下来是传值
frmB b=new frmB(sID,...)你可以在B窗体里面定义一个构造函数在你传值到B窗体的时候通过new这个对象调用这个构造函数将值传递到B窗体(其实窗体传值方式很多可以通过属性、结构等方式)
接下来就是对这条数据进行你想要的操作了!代码我不会给你全部的,做程序开发最忌讳就是照抄别人的,你得有自己的思路只要思路清晰了代码自然就好写了,不然给了你代码问题是解决了但是对你的技术提高是没有任何好处的!

追问

在不会的时候就只能照葫芦画瓢啊,然后自己才能从中总结和提升!麻烦请教一下窗体间通过属性的传值、结构的传值的实现方式!

参考技术C 这b框体中 创建一个属性。A窗体中直接 传个对象过去 参考技术D 你百度一下,子窗体传值给父窗体、父窗体传值给子窗体,就可以解决你的问题了。追问

能不能给我个代码看看?学习一下

C# winform 跨线程操作winform程序窗体

我在本地系统中已经运行了程序A,然后再次运行程序A我们命名为A1。现在问题来了,我如何在运行A1的时候找到本地系统中已经运行了的程序A,并且在程序A1中实例化调用A程序的一个窗口并打开。求详解代码!

首先你这不是跨线程,而是跨进程,进程之间叫通讯.

你可以用socket,都是本机ip都统一更好操作.这儿挺好做的我就不给你说了.

给你说下判断进程是否在运行

 

doenet2.0 +

C# Code

//true代表在运行,false代表未运行. 
private bool CloseMethod(string exe)
        
            System.Diagnostics.Process[] myPs;
            myPs = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process p in myPs)
            
                if (p.ProcessName.ToLower() == exe.ToLower())
                
                    try
                    
                        return true;
                    
                    catch (Exception eKillProcess)
                    
                    
                
            
            return false;
        

追问

大神,我已经判断了是否运行了该程序了。现在我需要是的就是获取到运行的那个程序然后打开那个程序的窗体。你说可以用socket,都是本机ip都统一更好操作。麻烦大神具体点。最好有代码,我是做JAVA的,最近公司才让我做C#,很多都不懂。

追答

哦原来是做Java的牛人,怪不得感觉你的做法怪怪的.

在一台电脑是尽量用一个Exe,多个窗体,用户也感觉不出来到底几个程序还是窗体.

你现在这种跨进程也能做,但属于是把简单的需求改麻烦了.

还是建议你改回到一个exe.

我先给你写一个socket demo

已知 调用端A.exe  被调用端 B.exe

代码有字数限制.已发附件

 

参考技术A 你这样做的目的是什么,是为了在不同实例间进行数据通讯还是什么追问

我们打算是在A程序运行时,如果用户在次点击A程序,那么就判断A程序是否运行,若已经运行了A程序,那么就打开已经运行了的A的主窗体。并且结束第二次运行程序的所有线程。现在已经实现判断是否已经运行了A程序,并且可以结束第二次运行程序。现在问题是,无法获取到已经运行的A程序并且调用窗体。

追答

你的两次描述不太对,你的需求实际上就是简单的防重复运行,只是在此基础上增加了一个检测原有程序句柄并前置窗口的功能(也就是说程序在启动时,最先检查的就是是否有实例在运行,根本不会涉及到下一步的什么结束之类的),网上这种例子很容易找,比如http://www.bitscn.com/pdb/dotnet/200610/80379.html?jdfwkey=feknh1

追问

防止重复运行我是需要,但是我已经解决了防止重复运行。

这个是我写的防止重复运行的代码,我需要在if里面,也就是强制结束新开程序所有线程之前把已经运行的NMS程序获取到,并且打开已经运行了的NMS程序主的窗体。

以上是关于C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 跨线程操作winform程序窗体

c#winform编程中 在窗体上画一个大图盖住一个小图 怎么用程序实现选中小图

C# winform 学习知识转发

c#的winform窗体中如何嵌套exe应用程序

在C# WinForm应用程序中如何获取当前窗体中被激发的控件名称?

C# winform程序中如何向datagridview中添加一行