Tải bản đầy đủ (.pdf) (3 trang)

Tài liệu Getting Typed DataRows from DataViews doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (13.71 KB, 3 trang )

[ Team LiB ]


Recipe 3.11 Getting Typed DataRows from DataViews
Problem
When using a DataView to find rows in a typed DataSet, you want to convert the rows
you find to typed DataRow objects having all the properties and methods defined in your
typed DataSet.
Solution
Cast the DataRow object returned by the Row property of a DataRowView to a typed
DataRow.
The sample code contains two event handlers:
Form.Load
Sets up the sample by creating a typed DataSet containing the Categories table
from the Northwind sample database. The default view of the typed Categories
table sorted by the CategoryID is bound to the data grid on the form.
Find Button.Click
Finds the row in the view matching the user specified CategoryID, gets the
underlying table row, and casts that to the typed row.
The C# code is shown in Example 3-11
.
Example 3-11. File: TypedDataRowFromDataViewForm.cs
// Namespaces, variables, and constants
using System;
using System.Configuration;
using System.Windows.Forms;
using System.Text;
using System.Data;
using System.Data.SqlClient;

private DataView dv;



// Table name constants
private const String CATEGORIES_TABLE = "Categories";

// . . .

private void TypedDataRowFromDataViewForm_Load(object sender,
System.EventArgs e)
{
// Create the typed DataSet.
CategoriesDS dsTyped = new CategoriesDS( );

// Create and fill the Categories table.
String sqlText =
"SELECT CategoryID, CategoryName, Description FROM Categories";
SqlDataAdapter da = new SqlDataAdapter(sqlText,
ConfigurationSettings.AppSettings["Sql_ConnectString"]);
da.Fill(dsTyped.Categories);

// Get the default view and set the sort key.
dv = dsTyped.Categories.DefaultView;
dv.Sort = "CategoryID";
// Bind the default view of the Categories table to the grid.
dataGrid.DataSource = dv;
}

private void findButton_Click(object sender, System.EventArgs e)
{
int categoryId = 0;
try

{
categoryId = Convert.ToInt32(categoryIdTextBox.Text);
// Get the index of the find row in the view.
int viewRowIndex = dv.Find(categoryId);
if (viewRowIndex == -1)
MessageBox.Show("Row not found for Category ID = " +
categoryId);
else
{
// Cast the underlying row in the view to a typed row.
CategoriesDS.CategoriesRow typedRow =
(CategoriesDS.CategoriesRow)dv[viewRowIndex].Row;

// Display the located typed row.
MessageBox.Show(typedRow.CategoryID + " - " +
typedRow.CategoryName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Discussion
The DataView indexer in C# or Item property in VB.NET allows access to the
DataRowView objects, or Windows Form control views of a DataRow, contained in the
DataView. The DataRowView object in turn exposes a Row property that is a reference
to the underlying DataRow object. Just as DataTable objects contain DataRow objects,
DataView objects contain DataRowView objects.
The Find( ) method of the DataView returns the index of the row matching the specified

search criteria. You can use the index to get a single DataRowView from the DataView.
The Row property of this DataRowView object is used to return the underlying DataRow
object. The typed DataSet classes—including the DataTable, DataColumn, and DataRow
objects—inherit from the ADO.NET disconnected classes allowing you to cast the
DataRow to the strongly typed row.
[ Team LiB ]


×