【问题标题】:C# set datasource for combobox in datagridviewC#在datagridview中为组合框设置数据源
【发布时间】:2015-11-20 16:58:31
【问题描述】:

我在一个旧程序中有两个表,即 Units 和 Frequencies。频率表具有单位表的外键,datagridview 将其数据源设置为单位表。我想在这个 datagridview 中添加一个包含频率的组合框。

选择单位

var data = context.Units.Where(u => u.Center.center_name.Trim() == cmbCenters.Text.Trim()).ToList();

// my datagridview
dgResult.AutoGenerateColumns = false;
dgResult.Columns.Clear();

....
....

if (chkRx.Checked)
{
    DataGridViewComboBoxColumn rxColumn = new DataGridViewComboBoxColumn();
    rxColumn.Name = "RX";
    rxColumn.ValueMember = "unitID";
    rxColumn.DispalyMember = "rxfreq";
    rxColumn.Datasource = context.Frequencies.ToList();
    dgResult.Columns.Add(rxColumn);
}
if (chkTx.Checked)
{
    DataGridViewComboBoxColumn txColumn = new DataGridViewComboBoxColumn();
    txColumn.Name = "TX";
    txColumn.ValueMember = "unitID";
    txColumn.DispalyMember = "txfreq";
    txColumn.Datasource = context.Frequencies.ToList();
    dgResult.Columns.Add(txColumn);
}

dgResult.DataSource = data;

更新:

我更改了我的代码,但所有频率都显示在组合框中,不仅是每行中此 unitID 的频率。

【问题讨论】:

  • @MethodMan 你的意思是我必须搜索每个数据并为每个行单元创建频率列表并将其绑定到组合框。
  • 你在说什么我听不懂你……你熟悉<ItemTemplates>
  • 每行必须有一个组合框,其中包含每行 unitID 的频率。
  • @MethodMan 更新问题

标签: c# linq datagridview combobox


【解决方案1】:
if (chkRx.Checked)`
{
    DataGridViewComboBoxColumn rxColumn = new DataGridViewComboBoxColumn();
    rxColumn.Name = "RX";
    //rxColumn.DataPropertyName = "BRxs";
    var datafrequencies =context.Frequencies.ToList();
    rxColumn.DataSource = datafrequencies;
    rxColumn.ValueMember = "frequencyId";
    rxColumn.DisplayMember = "frequencyName";
    dgResult.Columns.Add(rxColumn);
}
dgResult.DataSource = data;`

您在行中搜索频率的每个数据

  private void dgResult_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
      {
        DataGridViewComboBoxEditingControl comboControl = e.Control as DataGridViewComboBoxEditingControl;
        if (comboControl != null)
        {
            //Set the DropDown style to get an editable ComboBox
            if (comboControl.DropDownStyle != ComboBoxStyle.DropDown)
            {

                comboControl.DropDownStyle = ComboBoxStyle.DropDown;
                //int r = dgvconn.CurrentRow.Index;

            }
        }
    }

【讨论】:

  • 我对此进行了测试,但它添加了所有频率,而不仅仅是该单元在每行中的频率
  • var datafrequencies =context.Frequencies.ToList();rxColumn.DataSource = datafrequencies;
  • DataGridViewComboBoxColumn txColumn = new DataGridViewComboBoxColumn(); txColumn.Name = "TX"; txColumn.DisplayMember = "Txfhertz"; txColumn.ValueMember = "出价"; txColumn.DataSource = context.Frequences.AsQueryable().ToList();
  • 我使用上面的代码,但显示所有数据,但不仅是这个行频率,以及editingcontriolshowing如何帮助我,我不明白你的那部分答案
  • datagridview上的事件 //设置DropDown样式得到一个可编辑的ComboBox,搜索过滤
猜你喜欢
  • 1970-01-01
  • 2021-02-20
  • 2023-03-11
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多