我正在使用Visual Studio 2010 Express中的Windows窗体应用程序。我的主页表单有一个包含4个表的数据集。其中一个表称为“类别”,我想从一个名为Categories的单独表单中管理此表。
我按照@Harm van der Haas(Shared DataSet Over Multiple Forms C#)中列出的步骤进行了操作,但我无法正常工作。
在我的 Home 表单中,我有以下代码:
public partial class frmHome : Form
{
public DataSet _dsMain;
public frmHome(DataSet dsMain)
{
_dsMain = dsMain;
InitializeComponent();
}
在我的program.cs中,我有:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
DataSet DS = new DataSet();
Application.Run(new frmHome(DS));
}
}
在我的类别表单中,我有以下代码:
public partial class frmCategory : Form
{
public DataSet ds2;
public frmCategory(DataSet dsMain)
{
ds2 = dsMain;
InitializeComponent();
}
private void frmCategory_Load(object sender, EventArgs e)
{
dgvCategory.DataSource = ds2;
dgvCategory.DataMember = "Category";
dgvCategory.Refresh();
}
}
在这里,我启动表单类别:
private void btnStart_Click(object sender, EventArgs e)
{
Globals.startTime = DateTime.Now;
frmCategory frmC = new frmCategory(_dsMain);
frmC.ShowDialog();
//updateActiveTrans();
}
但是当Category表单加载我的datagridview dgvCategory
时,不会显示Category表头
答案 0 :(得分:1)
在frmCategory_Load事件中,为网格分配数据源时,需要指定所需的表。以下是示例代码:
public partial class frmCategory : Form
{
public DataSet ds2;
public frmCategory(DataSet dsMain)
{
ds2 = dsMain;
InitializeComponent();
}
private void frmCategory_Load(object sender, EventArgs e)
{
dgvCategory.DataSource = ds2.Tables[0]; //you can use .Tables[1] or the desired table
dgvCategory.DataMember = "Category";
dgvCategory.Refresh();
}
}
答案 1 :(得分:1)
以下是关于如何将Dataset
从一种形式传递到另一种形式的简单方法。我正在使用 Visual Studio 2012 C#WPF 和 PostgreSQL 作为数据库。
//ON MY FIRST FORM
//this is my connection - add it anywhere you want
//or change it according to your need
NpgsqlConnection iConnect = new NpgsqlConnection("Server = " + myModule.Server + ";Port = " + myModule.Port + ";User ID = " + myModule.UserID + ";Password = " + myModule.Password + ";Database = " + myModule.Database);
iConnect.Open();
NpgsqlCommand iQuery = new NpgsqlCommand("Select * from Table1");
iQuery.Connection = iConnect;
NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);
DataSet iDataSet = new DataSet();
iAdapter.Fill(iDataSet, "SET");
myModule.dtSet = iDataSet;//pass the dataset to myModule.cs
然后,点击项目&gt;&gt; 添加课程&gt;&gt;并将其重命名为 myModule.cs
然后在类myModule
中添加以下代码 //This is the code for the DATASET shared
static DataSet strDataset;
//this is the catcher of DATASET info request...
public static DataSet dtSet
{
get { return strDataset; }
set { strDataset = value; }
}
现在,您将在第二个表单中使用传递的数据集。
//MY SECOND FORM
public Form2()
{
InitializeComponent();
DataSet iDataSet = new DataSet();//set the instance of Dataset
iDataSet = myModule.dtSet; //get the data from myModule and pass it to iDataSet
//now, you can use it here!
}
就是这样,快乐的编码! ^ _ ^
答案 2 :(得分:0)
好的,我明白了。我从我的家庭表单错误地传递了DataSet。这是最终为我工作的代码。
在我的home(main)表单中,我创建了这样的构造函数:
public partial class frmHome : Form
{
public frmHome(DataSet dsMain)
{
InitializeComponent();
}
在我的 Program.cs 中,我做了以下事情:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
DataSet DS = new DataSet();
Application.Run(new frmHome(DS));
这就是我打开类别表单的方式。 - 我需要从我的dsMain DataSet远程查看和管理表的表单 -
frmCategory frmC = new frmCategory(dsMain);
frmC.ShowDialog();
在我的分类表单中,我传递了我的家庭表单中声明的 dsMain ,我声明了一个新的公共DataSet ds2 并使其等于 dsMain
public partial class frmCategory : Form
{
public DataSet ds2;
public frmCategory(DataSet dsMain)
{
ds2 = dsMain;
InitializeComponent();
}
最后在我的表单加载事件中,我将 ds2 绑定到我的dataGridView,如下所示:
private void frmCategory_Load(object sender, EventArgs e)
{
dgvCategory.DataSource = ds2;
dgvCategory.DataMember = "Category";
dgvCategory.Refresh();
它现在就像一个魅力。我现在可以从我的类别表单中查看,编辑和保存我的主DataSet。感谢@CharlesMighty的帮助,它帮助了很多。