0

我创建了一个名为“FamilyView”的视图来连接 2 个表(Families 和 SStatus),并将第一个表(Families)中的 id 替换为第二个表(SStatus)中存在的名称(该列现在称为“Status”)

此视图现在显示在用户可以修改的 datagridview 中

        Sda = new SqlDataAdapter("Select * from FamilyView",con);
        Sda.Fill(ds);
        dg.DataSource = ds.Tables[0];
        dg.Refresh();

我想要的是将列单元格“状态”转换为包含来自 SStatus 的所有名称的组合框

        SqlDataAdapter sadapter = new SqlDataAdapter("Select * From SStatus", con);
        DataSet ds1 = new DataSet();
        sadapter.Fill(ds1);

我找到了这段代码:

        DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(dg.Rows[i].Cells[0]);
        ComboColumn.DataSource = ds1.Tables[0];
        ComboColumn.DisplayMember = "Name";

但我无法更换电池

和这段代码,但我不知道如何使用它:

将绑定的组合框添加到 datagridview

        BindingSource StatusBD = new BindingSource();
        StatusBD.DataSource = ds1;


        DataGridViewComboBoxColumn colType = new DataGridViewComboBoxColumn();
        colType.HeaderText = "Status";
        colType.DropDownWidth = 90;
        colType.Width = 90;
        //colType.DataPropertyName = "Name";
        colType.DataSource = ds;
        colType.DisplayMember = "Name";
        colType.ValueMember = "IdStatus";

        dg.Columns.Insert(dg.Columns.GetColumnCount(DataGridViewElementStates.None) - 1, colType);
4

1 回答 1

0

您的数据源是空的:它应该包含 2 个表:一个带有 SStatus,另一个带有 Families。

然后按照我在您的帖子中的方式进行操作:

          DataGridViewComboBoxColumn colType = new DataGridViewComboBoxColumn();
        BindingSource wizardBindingSource = new BindingSource();
        wizardBindingSource.DataSource = dataSet; 
        wizardBindingSource.DataMember = "protocol"; // This is the table in the set
        colType.HeaderText = "Type";
        colType.DropDownWidth = 90;
        colType.Width = 90;
        colType.DataPropertyName = "wizardProtocol";
        colType.DataSource = wizardBindingSource;
        colType.DisplayMember = "protocolName";
        colType.ValueMember = "idprotocols"

这里 idProtocol(在“pcap”表中被称为协议)映射到协议名称。

于 2013-06-06T11:33:00.217 回答