我正在为我的应用程序开发一个“高级”搜索表单。我正在使用datagridview
来显示结果。我们的想法是能够彻底搜索(有很多选项)。
目前我像这样填写datagridview:
dgvData.AutoGenerateColumns = false;
if (cbbKlant.SelectedItem != null)
{
dgvData.DataSource = StatistiekManagement.getOpdrachten((klant)cbbKlant.SelectedItem);
//ID kolom
DataGridViewTextBoxColumn id = new DataGridViewTextBoxColumn();
id.Name = "ID";
id.DataPropertyName = "opdracht_id";
//Plaatsen kolom
DataGridViewTextBoxColumn plaatsen = new DataGridViewTextBoxColumn();
plaatsen.Name = "Plaatsen";
plaatsen.DataPropertyName = "aantal_personen";
//Vertrekplaats kolom
DataGridViewTextBoxColumn vertrek = new DataGridViewTextBoxColumn();
vertrek.Name = "Vertrek";
vertrek.DataPropertyName = "locatie_id";
this.dgvData.Columns.Add(id);
this.dgvData.Columns.Add(plaatsen);
this.dgvData.Columns.Add(vertrek);
}
我的问题是我想从另一个表中向datagridview
添加信息。例如:我有contract
,此合约有location
。如何在此location
中显示datagridview
?
我还使用LINQ TO SQL
从数据库中获取数据。
谢谢, 托马斯
答案 0 :(得分:1)
您无法将datagridview绑定到两个不同的源。
您的解决方案是编写一个SQL语句来连接两个不同的表,然后用它填充数据集。然后,您可以将其用作数据源。
答案 1 :(得分:1)
有几种方法可以附加位置。最简单的方法是将Location作为属性添加到绑定的基类。它不必是数据库中的字段,只是您可以绑定的属性。如果继承不是一个选项,有时封装可以工作。
除上述内容外,您始终可以向(绑定的)datagridview添加非绑定列。它应该显示的值可能来自您喜欢的任何来源。显示值的方法之一是使用datagridview的cellformatting事件:
//inside initialization void
dgvData.CellFormatting+=new DataGridViewCellFormattingEventHandler(dgvData_CellFormatting);
dvcol = new DataGridViewTextBoxColumn();
dgvData.Columns.Add(dvcol);
}
DataGridViewColumn dvcol;
void dgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dvcol != null && e.RowIndex != -1 && e.ColumnIndex == dvcol.Index)//where Column1 is your combobox column
{
var rec = (YourRecordTypeSuchAsContract)dgvData.Rows[e.RowIndex].DataBoundItem;
e.Value = ""; //get description based on the rec
}
}