在datagridview中显示来自另一个表的数据以代替外来值

时间:2012-08-31 09:43:37

标签: c# sql-server database datagridview

我正在使用C#[C sharp]和sql server来开发桌面应用程序。 我有三张桌子:

  1. tblSbjEmp
        SID
        eID

  2. tblSbj
    SID
    主旨名称

  3. tblEmp
    电子身份证
    EmployeeName

  4. 我想在Datagridview中显示 tblSbjEmp 。 我已经非常轻松地替换了datagridview中的组合框隐藏 eID 但我的问题是我希望SubjectName(不是组合框)代替网格中必须只读的sID

        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并选择combox的数据源,但我如何获得 SubjectName (固定值)来代替sID。但是当我必须更新表时我必须更新sID,以下是我使用的更新命令。     SObj.DA.Update(ds,“tblSbjCrs”); 查询无法通过此方法更新,因此我在网格后面使用了单个表格。

1 个答案:

答案 0 :(得分:0)

我有自己的答案。 在先生告诉我之后,我试图进行查询。萨米即可。感谢萨米先生。这是我的查询:

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

这是一个相关子查询,可以更新。谢谢大家。