我非常感谢您对这段代码的帮助。我有一个DataSet
,有两个桌子。我需要基于两列作为主键创建一个关系:
public DataSet GetAll()
{
string sql = $@"SELECT * FROM Journal ORDER BY JvNO, cYear;
SELECT * FROM JournalDetail ORDER BY JvNO, cYear";
using (SqlConnection connection = new SqlConnection(GlobalConfig.ConnString()))
{
connection.Open();
SqlCommand cmd = new SqlCommand(sql, connection);
SqlDataAdapter da = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
da.Fill(ds);
ds.Relations.Add("Journal_Batch", new DataColumn[] { ds.Tables[0].Columns["JvNO"], ds.Tables[0].Columns["cYear"] },
new DataColumn[] { ds.Tables[1].Columns["JvNO"], ds.Tables[1].Columns["cYear"] });
return ds;
}
}
目前,我正在这样做,并且可以正常工作,但是我需要使用DataSet
关系:
public DataSet GetJournalByID(int JVNO, int cYear)
{
string sql = $@"SELECT * FROM Journal WHERE JvNO = { JVNO } and cYear = { cYear };
SELECT * FROM JournalDetail WHERE JvNO = { JVNO } and cYear = { cYear };";
using (SqlConnection connection = new SqlConnection(GlobalConfig.ConnString()))
{
connection.Open();
SqlCommand cmd = new SqlCommand(sql, connection);
SqlDataAdapter da = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
我不知道第一个代码有什么问题,因为它返回所有匹配的JvNO
或 Year
。
我想使用第一个填充两个网格,如下所示:
private void GetData()
{
DataSet currentDs = new DataSet();
grdJournalDetails.DataSource = null;
grdJournal.DataSource = null;
JournalConnector journalConnection = new JournalConnector();
currentDs = journalConnection.GetAll();
grdJournal.DataSource = currentDs.Tables[0];
grdJournalDetails.DataSource = currentDs.Tables[1];
}
然后从 grdJournal 中选择每一行,以显示具有相关数据的 grdJournalDetails ,而无需每次都调用第二段代码。
我曾经使用过Dapper,但我对此很熟悉,但对于devexpress网格,它必须是一个数据表才能使用事件 gvJournal_FocusedRowChanged ,否则datarow始终返回null;
感谢您的任何建议。