【问题标题】:Adding column to datagradview from different datasource从不同的数据源向datagradview添加列
【发布时间】:2012-07-05 02:24:13
【问题描述】:

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

谢谢, 托马斯

【问题讨论】:

    标签: c# winforms datagridview datasource


    【解决方案1】:

    有几种方法可以附加位置。最简单的方法是您可以将 Location 作为属性添加到绑定的基类中。它不必是数据库中的一个字段,只是一个可以绑定的属性。如果不能选择继承,有时封装也可以。

    除了上述之外,您始终可以将非绑定列添加到(绑定)数据网格视图。它应该显示的值可以来自您喜欢的任何来源。显示值的一种方法是使用 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
            }
        }
    

    【讨论】:

    • 谢谢,我该如何将属性添加到绑定的基类中?我让 LINQ 创建所有类。
    • 扩展自动生成的 LINQ 类实际上非常容易,因为它们实现了部分声明。如果您转到后面的代码(右键单击设计器中的表格并单击“查看代码”),您应该会看到一个部分类,您可以在其中添加属性。 (只要这些属性没有列属性,它们就不会被视为数据库架构的一部分)。
    • 一些链接:简短示例:dotnetguy.co.uk/post/2009/05/13/… 更长的教程:sexyselect.net/blog/post/2011/06/24/…
    【解决方案2】:

    您不能将 datagridview 绑定到两个不同的源。

    您的解决方案是编写一条 SQL 语句来连接两个不同的表,然后用它填充一个数据集。然后,您可以将其用作数据源。

    【讨论】:

    • 如何从连接的 LINQ 语句返回数据?我编写了以下 linq 代码,但不知道如何返回查询:var query = (from o in dc.opdrachts where o.klant == klant join lo in dc.locatie_opdrachts on o.opdracht_id equals lo.opdracht_id select new { o, lo.locatie});
    • 我不确定。至少可以说,我的 LINQ 生锈了。您不能只针对您的 SQL 连接调用 SQL 连接并使用该数据集吗?
    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多