HOME PAGE | DOWNLOAD | TUTORIALS | XtraReports
Devexpress

Sunday, July 22, 2012

How to: Add an Unbound Column Storing Arbitrary Data

Assume that the XtraGrid is bound to the [Order Details] table in the NWind database. The grid contains "Quantity", "UnitPrice" and "Discount" columns which are bound to the corresponding fields in the database table. The example below shows how to add an unbound column to the grid to display the amount of each order according to the expression: Quantity*UnitPrice*(1-Discount).

The result is displayed below:

For another example which illustrates working with unbound columns, see the Unbound Columns tutorial.

C#

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Columns;

 

private void Form1_Load(object sender, System.EventArgs e) {

   // ...

   gridControl1.ForceInitialize();

 

   // Create an unbound column.

   GridColumn unbColumn = gridView1.Columns.AddField("Total");

   unbColumn.VisibleIndex = gridView1.Columns.Count;

   unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;

   // Disable editing.

   unbColumn.OptionsColumn.AllowEdit = false;

   // Specify format settings.

   unbColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;

   unbColumn.DisplayFormat.FormatString = "c";

   // Customize the appearance settings.

   unbColumn.AppearanceCell.BackColor = Color.LemonChiffon;

}

 

// Returns the total amount for a specific row.

decimal getTotalValue(int listSourceRowIndex) {

    DataRow row = nwindDataSet.Tables["Order Details"].Rows[listSourceRowIndex];

    decimal unitPrice = Convert.ToDecimal(row["UnitPrice"]);

    decimal quantity = Convert.ToDecimal(row["Quantity"]);

    decimal discount = Convert.ToDecimal(row["Discount"]);

    return unitPrice * quantity * (1 - discount);

}

 

// Provides data for the Total column.

private void gridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) {

   if (e.Column.FieldName == "Total" && e.IsGetData) e.Value =

     getTotalValue(e.ListSourceRowIndex);

}

VB

Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Columns
 
Private Sub Form1_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
   ' ...
   gridControl1.ForceInitialize()
 
   ' Create an unbound column.
   Dim unbColumn As GridColumn = GridView1.Columns.AddField("Total")
   unbColumn.VisibleIndex = GridView1.Columns.Count
   unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal
   ' Disable editing.
   unbColumn.OptionsColumn.AllowEdit = False
   ' Specify format settings.
   unbColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
   unbColumn.DisplayFormat.FormatString = "c"
   ' Customize the appearance settings.
   unbColumn.AppearanceCell.BackColor = Color.LemonChiffon
End Sub
 
' Returns the total amount for a specific row.
Private Function getTotalValue(ByVal listSourceRowIndex As Integer) As Decimal
    Dim row As DataRow = NwindDataSet.Tables("Order Details").Rows(listSourceRowIndex)
    Dim unitPrice As Decimal = Convert.ToDecimal(row("UnitPrice"))
    Dim quantity As Decimal = Convert.ToDecimal(row("Quantity"))
    Dim discount As Decimal = Convert.ToDecimal(row("Discount"))
    Return unitPrice * quantity * (1 - discount)
End Function
 
' Provides data for the Total column.
Private Sub GridView1_CustomUnboundColumnData(ByVal sender As Object, _
  ByVal e As CustomColumnDataEventArgs) Handles GridView1.CustomUnboundColumnData
   If e.Column.FieldName = "Total" And e.IsGetData Then e.Value = _
     getTotalValue(e.ListSourceRowIndex)
End Sub

 

No comments:

Post a Comment