c# - 从另一个用户控件访问 dataGrid 信息
问题描述
我在 Form.cs 上设置了两个用户控件。尝试创建现代 UI。第一个用户控件 (database.cs) 将数据库加载到 dataGridView 上。然后,用户可以使用此用户控制 (database.cs) 文件编辑数据库。现在我希望也能够从第二个用户控件(scan.cs)访问 dataGridView。
form1.cs 代码:
public partial class Form1 : Form
{
public static string db_n;
public static string db_p;
private void Form1_Load(object sender, EventArgs e)
{
var userdata = WelcomeForm.Run();
if (userdata != null)
{
db_n = userdata.UserName;
db_p = userdata.UserSurname;
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
scan1.BringToFront();
}
private void button3_Click(object sender, EventArgs e)
{
database1.BringToFront();
}
}
}
database.cs 代码:
public partial class Database : UserControl
{
public Database()
{
InitializeComponent();
}
public void load_db_Click(object sender, EventArgs e)
{
using (var connection = new MySqlConnection("server=localhost;user id='" + Form1.db_n + "';database=db;password='" + Form1.db_p + "'"))
{
try
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM table_new",
connection);
adapter.Fill(table);
dataGridView1.DataSource = table;
}
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
}
}
然后我将如何访问 scan.cs 中的 dataGridView1?
解决方案
您想从另一个用户控件访问该控件吗?如果是这样,您可以参考以下演示。
首先,我们可以通过Property
.
Form1.cs
public Form1 f1;
public Form1()
{
InitializeComponent();
// Get the instance of this form
f1 = this;
}
public DataGridView dataGridView { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
UCdatabase uCdatabase = new UCdatabase();
uCdatabase.Location = new Point(0, 0);
UCscan UCscan = new UCscan(f1);
UCscan.Location = new Point(310, 0);
// Save the DGV instance to dataGridView
dataGridView = uCdatabase.DGV;
Controls.Add(uCdatabase);
Controls.Add(UCscan);
}
UC数据库.cs
public partial class UCdatabase : UserControl
{
public UCdatabase()
{
InitializeComponent();
}
public DataGridView DGV
{
get { return dataGridView1; }
}
}
然后通过构造函数中的参数将datagridview实例传递给Ucscan。
UCscan.cs
public partial class UCscan : UserControl
{
public Form1 form1;
public UCscan(Form1 f1)
{
InitializeComponent();
form1 = f1;
}
private void btAccess_Click(object sender, EventArgs e)
{
// Access the DGV via "form1.dataGridView"
label1.Text = form1.dataGridView.Rows[0].Cells[0].Value.ToString();
}
}
在这个演示中,我们可以从 datagridview 中获取第一个单元格的值。
这是测试结果。
推荐阅读
- c# - 使用 .NET Core 读取扩展文件属性
- java - Java REST API 复杂查询
- html - SVG背景宽度问题与背景大小
- performance - TensorFlow 训练每批都变慢
- assembly - linux read 系统调用的问题
- c# - 为什么 ASP.NET Core Identity Cookie 不能跨域工作?
- vue.js - 如何在使用带有反应 url 的 axios 操作结果之前等待异步调用 - Vue.js 3
- java - 这个输入有什么问题?
- wordpress - 我修改了 php 文件,但我的 WordPress 网站没有更新,为什么?
- python - 如何修复 - Python 中“没有名为‘pandas’的模块”?