如何修改和扩展使用datasource的gridview?

时间:2017-05-14 14:53:17

标签: c# winforms visual-studio gridview datatable

我在c#中使用数据表“计算”设置了数据集,“计算”中有4个数据列 ID,名称,区域,长度 。现在我想扩展显示“计算”作为数据源的gridview,数据表有4个数据列,现在我想在gridview中再显示一个 Volume 乘以面积和长度。

Calculation.Rows.Add(1, "Room", 102.32, 1312.8);
this.gridView1.GridControl.DataSource = Calculation;

另外我想在gridview中隐藏Area和Length显示,只显示ID,Name和Volume。

2 个答案:

答案 0 :(得分:1)

对于附加数据,我会通过添加其他列将要显示的数据添加到数据表中。这样可以更容易地在网格中使用。

为了显示列的子集,我建议您创建要手动查看的列,并省略您不想查看的列或将visibile设置为false。后者的优点是,您可以允许程序员或者用户更多努力选择要查看的列。

一些示例代码,使用简单的地址数据填充网格,因为我没有足够的信息来处理数据定义:

手动创建表格

        var table = new DataTable {TableName = "AddressData"};

        // Declare DataColumn and DataRow variables.

        // Create new DataColumns, set DataType, ColumnName and add to DataTable.    
        // Create Addressee column.
        var column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "Addressee" };
        table.Columns.Add(column);

        // Create Address1 column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "Address1" };
        table.Columns.Add(column);

        // Create Address2 column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "Address2" };
        table.Columns.Add(column);

        // Create CityOrTown column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "CityOrTown" };
        table.Columns.Add(column);

        // Create Country column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "Country" };
        table.Columns.Add(column);

        // Create CountryId column.
        column = new DataColumn { DataType = Type.GetType("System.Int64"), ColumnName = "CountryId" };
        table.Columns.Add(column);

        // Create CountyOrState column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "CountyOrState" };
        table.Columns.Add(column);

        // Create Postcode column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "Postcode" };
        table.Columns.Add(column);

        // Create Formatted Address column.
        column = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "FormattedAddress" };
        table.Columns.Add(column);

创建表格后,您可以根据需要填充表格。或者,您只需从数据库中返回包含计算列的表。

手动创建列

    private void Prepare()
    {
        // Set up the grid
        AutoGenerateColumns = false;
        Columns.Clear();

        AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

        var column = new DataGridViewTextBoxColumn
                         {
                             AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
                             DataPropertyName = "Addressee",
                             DefaultCellStyle = CellStyles.Text,
                             HeaderText = @"Addressee",
                             Name = "AddresseeColumn",
                         };

        Columns.Add(column);

        // more columns added here to suit

        // Add invisible Id column
        var idColumn = new DataGridViewTextBoxColumn
                           {
                               DataPropertyName = "CountryId",
                               Name = "CountryIdColumn",
                               HeaderText = @"Id",
                               Width = 0,
                               Visible = false
                           };

        Columns.Add(idColumn);

    }

将每列的DataPropertyName设置为您要显示的表中的列名。 AutoSize设置会使网格中的所有备用空间自动分配给具有该设置的一列或多列。如果您将其设置在多个列上,则会自动调整它们,例如如果您有90像素的备用空间和三个AutoSize设置为Fill的列,那么每个将添加30个像素。

请注意,您也可以使用任何可枚举对象中完全相同的技术,例如:自定义数据对象的列表或数组。在上面的示例地址中,您可以使用地址列表来填充网格而不是数据表。

如果选择该选项,则可以在对象中包含计算值,并避免创建表格。如果您已经有合适的对象并从数据库中填充它们,那么非常有用。

你有很多选择!

答案 1 :(得分:0)

如果您拥有DataTable,则可以使用DataColumn的{​​{1}}属性来获取“区域”和“长度”列的产品。下面的代码创建一个名为“Volume”的新Expression,其DataColumn(第三个参数)是“Area”和“Length”列中值的乘积。

创建列后,只需将其添加到表中即可。只是猜测这可能就是你要找的东西。

Expression