0

デスクトップアプリケーションの開発には C# [Csharp] と sql server を使用しています。私は3つのテーブルを持っています:

  1. tblSbjEmp
    SID
    eID

  2. tblSbj
    sID
    サブジェクト名

  3. tblEmp
    eID
    従業員名

Datagridview でtblSbjEmpを表示したい。データグリッドビューでeIDを隠すコンボボックスを非常に簡単に置き換えましたが、私の問題は、読み取り専用である必要があるグリッドのsIDの代わりにSubjectName(コンボボックスではない)が必要なことです

    public DataSet getDS(String strTableName, String strQuery)
    {
        myCon = new SqlConnection("connection string");
        try
        {
            DS = new DataSet();
            DA = new SqlDataAdapter(strQuery, myCon);
            SqlCommandBuilder cmdBldr = new SqlCommandBuilder(DA);
            DA.Fill(DS, strTableName);
            return DS;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message + "-----" + ex.ToString());
            DataTable DT = new DataTable();
            return DS;
        }
        finally
        {
            if (myCon.State == ConnectionState.Open)
                myCon.Close();
        }

    }


ds = SObj.getDS("tblSbjEmp", "Select * from tblSbjEmp");

//Lecturer Combobox
DataGridViewComboBoxColumn Employee = new DataGridViewComboBoxColumn();
Employee.HeaderText = "Lecturer";
Employee.Name = "Employee";
Employee.MaxDropDownItems = 4;
Employee.Visible = true;
Employee.Width = 150;
Employee.DataSource = clsSettings.getAllRecords("Select eID, EmployeeName from tblEmp");

Employee.DataPropertyName = "eID";
Employee.ValueMember = "eID";
Employee.DisplayMember = "EmployeeName";

dgvLecturer.Columns.Add(Employee);

コンボボックスでは、DatapropertyName、ValueMember、および DisplayMember を設定し、コンボボックスのデータソースを選択できますが、sID の代わりにSubjectName (固定値) を取得するにはどうすればよいですか。しかし、テーブルを更新する必要がある場合は、sID を更新する必要があります。以下は、私が使用する更新コマンドです。SObj.DA.Update(ds, "tblSbjCrs"); このメソッドではクエリを更新できないため、グリッドの背後にある単一のテーブルを使用しました。

4

1 に答える 1

0

私は自分の答えを持っています。サーミさんに言われたので、質問に取り組んでみました。さみさん、ありがとうございます。ここに私のクエリがあります:

SELECT sID, eID,
    (SELECT SubjectName
      FROM  dbo.Subject
      WHERE (sID = dbo.tblSbjEmp.sID)) AS SubjectName
FROM dbo.tblSbjEmp
ORDER BY sID

これは相関サブクエリであり、更新可能です。ありがとうございます。

于 2012-09-01T18:23:42.650 に答える