DataRelation对象的最主要的用途是查找不同DataTable对象中的数据。通过DataRow对象的GetChildRows,GetParentRow和GetParentRows方法提供的。GetChildRows方法将相关数据作为一个DataRow对象数组返回。
通过GridView的SelectedIndexChanging事件判断出所对应的datarow,通过对datarow调用GetChildRows方法,返回DataRow对象数组,再经过遍历加载到泛型集合中去,最后将GridView的datasource与泛型集合绑定。
以下代码即为简单的Demo:
private string connString = ConfigurationManager.ConnectionStrings["ADOConnectionString"].ToString();
SQLHelper sqlHelper = new SQLHelper();
DataRelation rel;
DataSet ds;
DataRow rowselect;
protected void Page_Load(object sender, EventArgs e)
{
SetDataSource();
}
public void SetDataSource()
{
ds = new DataSet();
using (SqlConnection conn = new SqlConnection(connString))
{
SqlDataAdapter mainTable = new SqlDataAdapter("select * from Test_Model", conn);
SqlDataAdapter detailTable = new SqlDataAdapter("select * from Test_Item", conn);
mainTable.Fill(ds, "Test_Model");
detailTable.Fill(ds, "Test_Item");
rel = ds.Relations.Add("Model_Item", ds.Tables["Test_Model"].Columns["ModelCode"], ds.Tables["Test_Item"].Columns["ModelCode"]);
GridView1.DataSource = ds.Tables["Test_Model"].DefaultView;
GridView1.DataBind();
}
}
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
GridViewRow gvRow=GridView1.Rows[e.NewSelectedIndex];
txtModelCode.Text=gvRow.Cells[1].Text;
btnCommand.Text = "新建";
txtItemCode.Text = string.Empty;
txtItemDesc.Text = string.Empty;
rowselect = ds.Tables["Test_Model"].Rows[e.NewSelectedIndex];
IList<TestItem> testItems=new List<TestItem>();
foreach (DataRow row in rowselect.GetChildRows(rel))
{
TestItem testItem = new TestItem(row[0].ToString(),row[1].ToString(),row[2].ToString());
testItems.Add(testItem);
}
GridView2.DataSource = testItems;
GridView2.DataBind();
}
protected void GridView2_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
GridViewRow gvRow = GridView2.Rows[e.NewSelectedIndex];
txtModelCode.Text = gvRow.Cells[1].Text;
txtItemCode.Text = gvRow.Cells[2].Text;
txtItemDesc.Text = gvRow.Cells[3].Text;
btnCommand.Text = "保存";
}