Using the C1FlexGrid Control > Saving, Loading, and Printing > Loading Grids from Databases |
You can also load grid data from a database. This is different from data binding, which keeps a live connection between one or more controls and the underlying data source. To load data from a database, you can use DataReader objects, as shown below:
To write code in Visual Basic
Visual Basic |
Copy Code
|
---|---|
Private Sub _btnData_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnData.Click ' Prepare DataReader. Dim strConn As String = "data source=MYMACHINE;initial catalog=Northwind;" Dim myConn As New SqlClient.SqlConnection(strConn) Dim myCMD As New SqlClient.SqlCommand("SELECT * FROM Employees", myConn) myConn.Open() Dim myReader As SqlClient.SqlDataReader = myCMD.ExecuteReader() ' Build the grid structure from the DB schema. Dim dt As DataTable = myReader.GetSchemaTable() _flex.Cols.Count = 1 Dim dr As DataRow For Each dr In dt.Rows Dim c As C1.Win.C1FlexGrid.Column = _flex.Cols.Add() c.Caption =(c.Name <= CStr(dr("ColumnName"))) c.DataType = CType(dr("DataType"), Type) Next dr ' Populate the grid. _flex.Rows.Count = 1 Dim row As Integer = 1 Dim cols As Integer = dt.Columns.Count Dim v As Object() = CType(Array.CreateInstance(GetType(Object), cols), Object()) While myReader.Read() myReader.GetValues(v) _flex.AddItem(v, row + 1, 1) End While ' Cleanup. _flex.AutoSizeCols() myReader.Close() myConn.Close() End Sub |
To write code in C#
C# |
Copy Code
|
---|---|
private void _btnData_Click(object sender, System.EventArgs e) { // Prepare DataReader. string strConn = "data source=MYMACHINE;initial catalog=Northwind;"; System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection(strConn); System.Data.SqlClient.SqlCommand myCMD = new System.Data.SqlClient.SqlCommand("SELECT * FROM Employees", myConn); myConn.Open(); System.Data.SqlClient.SqlDataReader myReader = myCMD.ExecuteReader(); // Build the grid structure from the DB schema. DataTable dt = myReader.GetSchemaTable(); _flex.Cols.Count = 1; foreach (DataRow dr in dt.Rows) { Column c = _flex.Cols.Add(); c.Caption = c.Name = (string)dr["ColumnName"]; c.DataType = (Type)dr["DataType"]; } // Populate the grid. _flex.Rows.Count = 1; int row = 1; int cols = dt.Columns.Count; object[] v = (object[])Array.CreateInstance(typeof(object), cols); while (myReader.Read()) { myReader.GetValues(v); _flex.AddItem(v, row++, 1); } // Cleanup. _flex.AutoSizeCols(); myReader.Close(); myConn.Close(); } |