C#中两列的数据集关系

时间:2018-09-03 19:48:09

标签: c# sql dataset

我非常感谢您对这段代码的帮助。我有一个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;

感谢您的任何建议。

0 个答案:

没有答案