积极答复者
DataGridView的问题C# 数据库 多个存在一定关系的表的显示

问题
-
现在有两个表typhoonlist和tPathInfo,它们之间靠tID联系
Typhoonlist的内容是有哪些typhoon
tPathInfo的内容是每一个typhoon的详细信息
现在需要在单击dataGridView1的某一条typhoon时候,触发dataGridView1_CellContentClick事件,开始调用tInfoDisplay(),tInfoDisplay()需要实现的功能就是在dataGridView2中显示出当前dataGridView1中这一条typhoon的详细信息(也就是显示tPathInfo的部分内容)。敬请高手帮助我完成tInfoDisplay()的编写
鉴于之前没有可行答案,给出的奖励分数不得不还给系统,这次决定完成后给再更多的分。谢谢~~~~
private void tInfoDisplay()
{
SqlConnection thisConnection = new SqlConnection(
@"Server=(local);Integrated Security=True;" +
"Database=Typhone");
SqlDataAdapter thisAdapter = new SqlDataAdapter(
"SELECT tID, tName FROM typhoonlist", thisConnection);
SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
DataSet thisDataSet = new DataSet();// Create DataSet to contain related data tables, rows, and columns
SqlDataAdapter tlistAdapter = new SqlDataAdapter(
"SELECT * FROM typhoonlist", thisConnection);
SqlDataAdapter tinfoAdapter = new SqlDataAdapter(
"SELECT * FROM tPathInfo", thisConnection);
tlistAdapter.Fill(thisDataSet, "typhoonlist");
tinfoAdapter.Fill(thisDataSet, "tPathInfo");
DataRelation listinfoRel = thisDataSet.Relations.Add("listinfo",
thisDataSet.Tables["typhoonlist"].Columns["tID"],
thisDataSet.Tables["tPathInfo"].Columns["tID"]);// Set up DataRelation between customers and orders
// Print out
//把每一条关于当前台风的信息写入dataGridView2
foreach (DataRow listRow in thisDataSet.Tables["typhoonlist"].Rows)
{
while (listRow == dataGridView1.CurrentRow)
{
foreach (DataRow infoRow in listRow.GetChildRows(listinfoRel))
{
}
}
}
dataGridView2.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) //Info表数据显示
{
tInfoDisplay();
}
答案
-
楼主,你好
如果你的是winform的程序,而且你的dataGridView1中的每行数据表示你说的typhoon的信息。当你选择其它的行时,dataGridView2自动根据你的dataGridView1的选择的行而更新。如果是这样,你可以使用SelectionChanged事件。
e.gprivate void dataGridView1_SelectionChanged(object sender, EventArgs e) { DataGridView dgv = sender as DataGridView; MessageBox.Show(dgv.CurrentRow.Cells[1].Value.ToString()); }
你可以在这个事件中根据你的选择更新dataGridView2。
比如因为两张表是通过tID联系的,你可以通过dgv.CurrentRow.Cells[1].Value.ToString()这样的方式获得这个tID,然后作为存储过程的参数传入来获得相应的typhoon信息。然后为dataGridView2重新指定数据源即可。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2009年5月12日 8:43
-
你的问题看一下,你如果是个初学者,困难在与不知道利用现有的技术实现你想要的联动效果。
我给一些参考提示。要做到点击第一个dataGridView1里的记录,dataGridView2里显示其对应的详细信息,这个解决思路大致如下:
1.使用DataSet没关系,强弱类型都可以,把数据从数据库取出后方绑定给dataGridView1
2.添加dataGridView1的点击事件里的处理代码,当用户点击完后,获取点击的记录ID主要的信息,进行一次查询typhoon的详细信息。返回数据DataSet,这个数据查询和1类似
3。把查询出的数据绑定到dataGridView2上,进行显示。
不论是WinForm还是Asp.net,解决问题的思路都是相似的,只是最后的显示部分有所不同,但数据查询都是ado.net,点击处理基本都是使用的事件机制。希望对你有所帮助~
you have a dream,you gonna protect it!- 已标记为答案 KeFang Chen 2009年5月12日 8:43
全部回复
-
楼主,你好
如果你的是winform的程序,而且你的dataGridView1中的每行数据表示你说的typhoon的信息。当你选择其它的行时,dataGridView2自动根据你的dataGridView1的选择的行而更新。如果是这样,你可以使用SelectionChanged事件。
e.gprivate void dataGridView1_SelectionChanged(object sender, EventArgs e) { DataGridView dgv = sender as DataGridView; MessageBox.Show(dgv.CurrentRow.Cells[1].Value.ToString()); }
你可以在这个事件中根据你的选择更新dataGridView2。
比如因为两张表是通过tID联系的,你可以通过dgv.CurrentRow.Cells[1].Value.ToString()这样的方式获得这个tID,然后作为存储过程的参数传入来获得相应的typhoon信息。然后为dataGridView2重新指定数据源即可。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2009年5月12日 8:43
-
你的问题看一下,你如果是个初学者,困难在与不知道利用现有的技术实现你想要的联动效果。
我给一些参考提示。要做到点击第一个dataGridView1里的记录,dataGridView2里显示其对应的详细信息,这个解决思路大致如下:
1.使用DataSet没关系,强弱类型都可以,把数据从数据库取出后方绑定给dataGridView1
2.添加dataGridView1的点击事件里的处理代码,当用户点击完后,获取点击的记录ID主要的信息,进行一次查询typhoon的详细信息。返回数据DataSet,这个数据查询和1类似
3。把查询出的数据绑定到dataGridView2上,进行显示。
不论是WinForm还是Asp.net,解决问题的思路都是相似的,只是最后的显示部分有所不同,但数据查询都是ado.net,点击处理基本都是使用的事件机制。希望对你有所帮助~
you have a dream,you gonna protect it!- 已标记为答案 KeFang Chen 2009年5月12日 8:43
-
综合大家的指导最后实现了需要的功能了
private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)//Info表数据显示
{
string currentID;
currentID = dataGridView1.CurrentRow.Cells[0].Value.ToString();
tInfoDisplay(currentID);
}
事件换了,我才发现CellContentClick选中的只是很小的一个格子,还是选中一行比较好
private void tInfoDisplay(string currentID)
{
SqlConnection thisConnection = new SqlConnection(
@"Server=(local);Integrated Security=True;" +
"Database=Typhone");SqlDataAdapter thisAdapter = new SqlDataAdapter(
"SELECT tID, tName FROM typhoonlist", thisConnection);SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
DataSet thisDataSet = new DataSet();
SqlDataAdapter tinfoAdapter = new SqlDataAdapter(
"SELECT * FROM tPathInfo where tID='"+currentID.ToString()+"'", thisConnection);
tinfoAdapter.Fill(thisDataSet, "tPathInfo");
dataGridView2.DataMember = "tPathInfo";
dataGridView2.DataSource = thisDataSet;
dataGridView2.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
}
我一直被DataRelation困扰了 其实不用那么复杂 呵呵
不过我还有问题就是:这样是把查询好的符合条件的数据放在一个DataSet 里面整体绑定到dataGridView2,如果需要一行一行的把数据添加到dataGridView里面又要怎么完成呢?