双击datagridview后,Combobox中的SelectedValue
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双击datagridview后,Combobox中的SelectedValue相关的知识,希望对你有一定的参考价值。
我有一个datagridview,它有2个表的值。
当我双击一行时,我需要将这些值传递给另一个表单。该表单包含文本框和一个Combobox,其中包含表中的值,这些值为我提供了所有需要选择的值。
对于文本框,没有问题,但对于组合框,这是一个真正的痛苦。
但我需要这个ComboBox从datagridview获取Selected Value,但它总是从列表中转换第一个值。
这是我在datagridview中双击事件的代码。
请有人帮我做这个工作吗?
这是一个Windows窗体项目。
public System.Data.DataTable ContratosTable { get; set; }
public void LoadContratosTable()
{
ContratosTable = new System.Data.DataTable();
using (var cn = new SqlConnection { ConnectionString = ConfigurationManager.ConnectionStrings["IWMConnectionString"].ConnectionString.ToString() })
{
using (var cmd = new SqlCommand { Connection = cn })
{
cn.Open();
cmd.CommandText = "SELECT IdContrato, Designacao FROM dbo.Contratos";
ContratosTable.Load(cmd.ExecuteReader());
}
}
}
private void concelhos_datagrid_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
BindingSource bs = new BindingSource();
LoadContratosTable();
bs.DataSource = ContratosTable;
Concelhos_Edit f = new Concelhos_Edit();
f.txt_id.Text = concelhos_datagrid.CurrentRow.Cells[0].Value.ToString();
var _nomeContrato = ContratosTable.AsEnumerable().FirstOrDefault(a => a.Field<int>("IdContrato") == ((DataRowView)bs.Current).Row.Field<int>("IdContrato")).Field<string>("Designacao");
var pos = f.cmb_contrato.FindString(_nomeContrato);
if (pos > -1)
{
f.cmb_contrato.SelectedIndex = pos;
}
f.txt_sigla.Text = concelhos_datagrid.CurrentRow.Cells[2].Value.ToString();
f.txt_nome.Text = concelhos_datagrid.CurrentRow.Cells[3].Value.ToString();
f.txt_codigo.Text = concelhos_datagrid.CurrentRow.Cells[4].Value.ToString();
f.txt_qservico.Text = concelhos_datagrid.CurrentRow.Cells[5].Value.ToString();
f.chk_ativo.Checked = (bool)concelhos_datagrid.CurrentRow.Cells[6].Value;
f.MdiParent = this.MdiParent;
f.Show();
}
这将指出并帮助您朝着正确的方向前进。尝试并遵循MVC或MVVM,设计将帮助您将问题分开,最终您将获得更好,更清晰的代码。
现在,创建一个如下所示的类:
public class Info
{
public Info()
{
this.NomeContrato = new List<string>();
}
public string Id { get; set; }
public string Sigla { get; set; }
public string Nome { get; set; }
public string Codigo { get; set; }
public string QServico { get; set; }
public bool Ativo { get; set; }
public List<string> NomeContrato { get; set; }
}
然后将此属性添加到Concelhos_Edit
类:
public Info Model { get; set; }
同时将此代码添加到_Load
形式的Concelhos_Edit
处理程序中:
this.cmb_contrato.DataSource = this.Model.NomeContrato;
// If you need the SelectedValue from the other form, then add another
// property to Info class and put the value there.
// this.cmb_contrato.SelectedValue = this.Model.SelectedValue;
this.cmb_contrato.SelectedValue = "whatever you want to be selected";
然后,修改名为:concelhos_datagrid_CellDoubleClick
的单元格双击方法,如下所示:
private void concelhos_datagrid_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// Your code...
var editForm = new Concelhos_Edit();
var editFormModel = new Info();
editFormModel.Id = f.txt_id.Text = concelhos_datagrid.CurrentRow.Cells[0].Value.ToString();
// Set other properties
// Here is the work for dropdown
var _nomeContrato = ContratosTable.AsEnumerable().FirstOrDefault(a => a.Field<int>("IdContrato") == ((DataRowView)bs.Current).Row.Field<int>("IdContrato")).Field<string>("Designacao");
editFormModel.NomeContrato.AddRange(_nomeContrato);
formEdit.Model = editFormModel;
formEdit.MdiParent = this.MdiParent;
formEdit.Show();
}
请使用此代码作为指南,您可能需要进行调整。我们的想法是传递表单所需的信息,然后让表单对信息做任何事情:是否要在TextBox
或RadioButton
中显示信息是该形式的业务。
以上是关于双击datagridview后,Combobox中的SelectedValue的主要内容,如果未能解决你的问题,请参考以下文章
关于WinForm下DataGridView控件行的选择的问题
DataGridView ComboBox Column:从下拉列表中选择后更改单元格值?
Winform中DataGridView网格添加ComBoBox
编辑后C#保存DataGridView(覆盖导入的Excel文件)
Windows 窗体 DataGridView 将 SelectedIndexChanged 事件附加到 ComboBox