关键词:
使用 DataGridView 控件的一种最常见方案是“主/详细信息”窗体,这样的窗体可显示两个数据库表之间的父/子关系。如果选择主表中的行,将导致以相应的子数据来更新详细信息表。
主/详细信息窗体很容易实现,这需要使用 DataGridView 控件和 BindingSource 组件之间的交互。在本演练中,将使用两个 DataGridView 控件和两个 BindingSource 组件来生成窗体。窗体将显示 Northwind SQL Server 示例数据库中的两个相关表:Customers 和 Orders。完成后,将得到一个窗体,它可以在主 DataGridView 中显示数据库中的所有客户,并在详细信息 DataGridView 中显示所选客户的所有订单。
创建窗体
创建主/详细信息窗体
-
创建一个从 Form 派生的类,该类包含两个 DataGridView 控件和两个 BindingSource 组件。下面的代码提供了基本的窗体初始化,并包含一个 Main 方法。如果使用 Visual Studio 设计器来创建窗体,则可以使用设计器生成的代码而不是这里的代码,但一定要使用这里的变量声明中显示的名称。
-
using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms;
public class Form1 : System.Windows.Forms.Form { private DataGridView masterDataGridView = new DataGridView(); private BindingSource masterBindingSource = new BindingSource(); private DataGridView detailsDataGridView = new DataGridView(); private BindingSource detailsBindingSource = new BindingSource();
[STAThreadAttribute()] public static void Main() { Application.Run(new Form1()); }
// Initializes the form. public Form1() { masterDataGridView.Dock = DockStyle.Fill; detailsDataGridView.Dock = DockStyle.Fill;
SplitContainer splitContainer1 = new SplitContainer(); splitContainer1.Dock = DockStyle.Fill; splitContainer1.Orientation = Orientation.Horizontal; splitContainer1.Panel1.Controls.Add(masterDataGridView); splitContainer1.Panel2.Controls.Add(detailsDataGridView);
this.Controls.Add(splitContainer1); this.Load += new System.EventHandler(Form1_Load); this.Text = "DataGridView master/detail demo"; } } -
在窗体的类定义中实现一个方法,用于处理有关与数据库的连接的详细信息。此示例使用 GetData 方法来填充 DataSet 对象,并向数据集添加 DataRelation 对象,还要绑定 BindingSource 组件。务必将 connectionString 变量设置为适用于您的数据库的值,将敏感信息(如密码)存储在连接字符串中可能会影响应用程序的安全性。若要控制对数据库的访问,一种较为安全的方法是使用 Windows 身份验证(也称为集成安全性)。有关更多信息,请参见保护连接字符串。
-
private void GetData() { try { // Specify a connection string. Replace the given value with a // valid connection string for a Northwind SQL Server sample // database accessible to your system. String connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost"; SqlConnection connection = new SqlConnection(connectionString);
// Create a DataSet. DataSet data = new DataSet(); data.Locale = System.Globalization.CultureInfo.InvariantCulture;
// Add data from the Customers table to the DataSet. SqlDataAdapter masterDataAdapter = new SqlDataAdapter("select * from Customers", connection); masterDataAdapter.Fill(data, "Customers");
// Add data from the Orders table to the DataSet. SqlDataAdapter detailsDataAdapter = new SqlDataAdapter("select * from Orders", connection); detailsDataAdapter.Fill(data, "Orders");
// Establish a relationship between the two tables. DataRelation relation = new DataRelation("CustomersOrders", data.Tables["Customers"].Columns["CustomerID"], data.Tables["Orders"].Columns["CustomerID"]); data.Relations.Add(relation);
// Bind the master data connector to the Customers table. masterBindingSource.DataSource = data; masterBindingSource.DataMember = "Customers";
// Bind the details data connector to the master data connector, // using the DataRelation name to filter the information in the // details table based on the current row in the master table. detailsBindingSource.DataSource = masterBindingSource; detailsBindingSource.DataMember = "CustomersOrders"; } catch (SqlException) { MessageBox.Show("To run this example, replace the value of the " + "connectionString variable with a connection string that is " + "valid for your system."); } } -
为窗体的 Load 事件实现一个处理程序,该事件将 DataGridView 控件绑定到 BindingSource 组件,并调用 GetData 方法。下面的示例所包括的代码可以调整 DataGridView 列的大小,以容纳所显示的数据。
-
private void Form1_Load(object sender, System.EventArgs e) { // Bind the DataGridView controls to the BindingSource // components and load the data from the database. masterDataGridView.DataSource = masterBindingSource; detailsDataGridView.DataSource = detailsBindingSource; GetData();
// Resize the master DataGridView columns to fit the newly loaded data. masterDataGridView.AutoResizeColumns();
// Configure the details DataGridView so that its columns automatically // adjust their widths when the data changes. detailsDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; }
WPF DataGrid 与 Windows 窗体 DataGridView
】WPFDataGrid与Windows窗体DataGridView【英文标题】:WPFDataGridVsWindowsFormsDataGridView【发布时间】:2011-06-0413:05:17【问题描述】:我在WPF和Windows窗体方面有经验,但是只使用过Windows窗体DataGridView而不是WPFDataGrid(据我所知,它仅包含在.... 查看详情
使用 C# Windows 窗体中 SQL 查询的大量结果填充 dataGridView
】使用C#Windows窗体中SQL查询的大量结果填充dataGridView【英文标题】:PopulatedataGridViewwithalargesetofresultsfromSQLqueryinC#WindowsForms【发布时间】:2011-05-2704:15:41【问题描述】:我创建了一个WindowsForms,上面有一个dataGridView。我还有一个... 查看详情
数据网格视图更新,在 vb.net windows 窗体中编辑和删除,使用多个表来填充 datagridview
...新,在vb.netwindows窗体中编辑和删除,使用多个表来填充datagridview【英文标题】:datagridviewupdate,Editanddeleteinvb.netwindowsformthatusingmultipletabletopopulatedatagridview【发布时间】:2014-01-0607:20:13【问题描述】:我是Windows窗体应用程序的新... 查看详情
怎样在windows窗体程序中使用entityframework进行数据的增删?
我用C#开发Windows窗体应用程序,在一个窗体中使用了DataGridView控件显示数据,把DataGridView控件与EF的查询结果集绑定,数据正常显示(如下图),也能修改(直接在DataGridView中修改然后保存即可,保存按钮的Click事件调用的是DbCon... 查看详情
对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?
】对于使用“DataGridView”的Windows窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?【英文标题】:ForaWindowsFormsApplicationusing`DataGridView`,howcanIcheckavalueinmyDataSourceandchangethecolorofaseparatecell?【发布时间】:2016-09-1622:27:... 查看详情
Windows 窗体:从网站到 dataGridView 的 XML
】Windows窗体:从网站到dataGridView的XML【英文标题】:WindowsForms:XMLfromwebsitetodataGridView【发布时间】:2021-07-2716:51:28【问题描述】:我想将thisXML的特定部分直接导入到我在Windows窗体中的dataGridView中,无需下载XML文件。当前工作代... 查看详情
在 C# 中对 dataGridView 列进行排序? (Windows 窗体)
】在C#中对dataGridView列进行排序?(Windows窗体)【英文标题】:SortdataGridViewcolumnsinC#?(WindowsForm)【发布时间】:2010-10-2220:18:25【问题描述】:我有一个从sql表绑定的datagridview,在该dv中我有这些属性:Id、Name和Price。当我将名称列... 查看详情
如何直接在 Windows 窗体应用程序上编辑/添加/更新 datagridview
】如何直接在Windows窗体应用程序上编辑/添加/更新datagridview【英文标题】:Howtoedit/add/updatedatagridviewdirectlyonWindowsFormsApp【发布时间】:2019-10-0201:06:07【问题描述】:我正在制作一个管理酒店的Windows窗体应用程序。它有客户、房... 查看详情
c#在windows窗体datagridview单元格中承载控件
usingSystem;usingSystem.Windows.Forms;publicclassCalendarColumn:DataGridViewColumn{publicCalendarColumn():base(newCalendarCell()){}publicoverrideDataGridViewCellCellTemplate{get{returnbase.CellTemplat 查看详情
为什么在datagridview中对combobox使用自动完成时有两个列表?(代码片段)
...我的一位用户在使用该应用程序时向我展示了这一点。在datagridview中,如果他们单击下拉按钮,然后开始键入,它会覆盖原始下拉列表上的自动完成。我在这做错了什么?PrivateSubData_CreateOrder_EditingControlShowing(senderAsObjec 查看详情
强制 DataGridView 填充 SplitContainer 中的可用空间
】强制DataGridView填充SplitContainer中的可用空间【英文标题】:ForcingDataGridViewtofillavailablespaceinSplitContainer【发布时间】:2016-10-1715:30:22【问题描述】:我正在编写一个Windows窗体应用程序,该应用程序在三个可用区域中的两个区域... 查看详情
C# Windows 窗体(非 SQL):在新窗体上用整数 +1 填充 DataGridView 行中当前最高数字的文本框
】C#Windows窗体(非SQL):在新窗体上用整数+1填充DataGridView行中当前最高数字的文本框【英文标题】:C#WindowsForms(Non-SQL):Populatetextboxonnewformwithaninteger+1abovethehighestnumbercurrentlyinaDataGridViewrow【发布时间】:2022-01-1003:27:00【问题描述... 查看详情
如何在 Windows 窗体 C# 中单击按钮通过 DataGridView 更新数据库中的布尔字段
】如何在Windows窗体C#中单击按钮通过DataGridView更新数据库中的布尔字段【英文标题】:HowtoupdateBooleanfieldindatabasethroughDataGridViewbybuttonclickinWindowsFormC#【发布时间】:2017-05-1401:54:02【问题描述】:DataGridView显示我的数据库表中的值... 查看详情
如何:禁用windows窗体datagridview控件的按钮列中的按钮
转自:https://msdn.microsoft.com/zh-cn/library/ms171619(v=vs.110).aspx DataGridView 控件包括 DataGridViewButtonCell 类,其用于显示具有与按钮类似的用户界面(UI)的单元格。 但是,DataGridViewButtonCell 不提供禁用单 查看详情
如何从 c# Windows 窗体中文本框的文本内容更新 datagridview 的列
】如何从c#Windows窗体中文本框的文本内容更新datagridview的列【英文标题】:Howtoupdatethecolumnofdatagridviewfromthetextcontentsoftextboxinc#Windowsform【发布时间】:2011-01-2906:07:57【问题描述】:我有一个包含表格内容的数据网格视图。在那我... 查看详情
将数据从组合框获取到 datagridview
】将数据从组合框获取到datagridview【英文标题】:gettingdatafromcomboboxtoadatagridview【发布时间】:2010-05-1910:58:41【问题描述】:我正在使用Windows窗体应用程序。我有两个组合框,comboA和comboB。我有一个包含两列的数据网格视图。现... 查看详情
MySQL 和 C#.NET DataGridView、更新、插入和删除
】MySQL和C#.NETDataGridView、更新、插入和删除【英文标题】:MySQLandC#.NETDataGridView,Updates,InsertsandDeletes【发布时间】:2011-09-2909:24:53【问题描述】:前几天我开始使用Windows窗体在C#.NET中进行项目,距离我上次使用Windows窗体已经有一... 查看详情
如何在datagridview中显示两个人之间的关系(代码片段)
我想在datagridview(C#Windows窗体)中显示两个人之间的关系。所以,我与人做了一个(MSAccess)表。每个人都有一个唯一的编号作为PK。之后我制作了一张关系表。在这个表中,我有一个人1(FK)列,关系列和人2(FK)列。这看起... 查看详情