从不同的数据源向datagradview添加列

时间:2012-07-04 14:58:22

标签: c# winforms datagridview datasource

我正在为我的应用程序开发一个“高级”搜索表单。我正在使用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从数据库中获取数据。

谢谢, 托马斯

2 个答案:

答案 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
        }
    }