Figure 2 Getting the Data <%@ Page language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
String strCmd = "SELECT employeeid, firstname, lastname FROM employees
ORDER BY lastname";
String strCnn = "INITIAL CATALOG=northwind;SERVER=localhost;INTEGRATED
SECURITY=sspi;";
SqlDataAdapter da = new SqlDataAdapter(strCmd, strCnn);
DataSet ds = new DataSet();
da.Fill(ds);
// add a display only column
DataColumn col = new DataColumn("EmployeeName", typeof(string),
"lastname + ', ' + firstname");
ds.Tables[0].Columns.Add(col);
masterGrid.DataSource = ds.Tables[0];
masterGrid.DataBind();
}
private void SelectedIndexChanged(Object sender, EventArgs e)
{
BindChildData();
}
private void BindChildData()
{
String strCnn = "INITIAL CATALOG=northwind;SERVER=localhost;INTEGRATED
SECURITY=sspi;";
SqlConnection conn = new SqlConnection(strCnn);
String strCmd = "SELECT et.territoryid, td.territorydescription
FROM employeeterritories AS et INNER JOIN territories AS td
ON et.territoryid=td.territoryid WHERE et.employeeid=@nEmpID";
SqlCommand cmd = new SqlCommand(strCmd, conn);
int nEmpID = (int) masterGrid.DataKeys[masterGrid.SelectedIndex];
SqlParameter p = new SqlParameter("@nEmpID", SqlDbType.Int);
p.Value = nEmpID;
cmd.Parameters.Add(p);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
detailGrid.DataSource = ds.Tables[0];
detailGrid.DataBind();
}
Figure 4 Using DataBinding <script runat="server">
void Page_Load(Object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
String strCmd = "SELECT employeeid, firstname, lastname FROM
employees ORDER BY lastname";
String strCnn = "INITIAL CATALOG=northwind;
SERVER=localhost;INTEGRATED SECURITY=sspi;";
SqlDataAdapter da = new SqlDataAdapter(strCmd, strCnn);
DataSet ds = new DataSet();
da.Fill(ds);
// add a display only column
DataColumn col = new DataColumn("EmployeeName", typeof(string),
"lastname + ', ' + firstname");
ds.Tables[0].Columns.Add(col);
masterGrid.DataSource = ds.Tables[0];
masterGrid.DataBind();
}
private void SelectedIndexChanged(Object sender, EventArgs e)
{
detailGrid.DataBind();
}
private DataTable BindChildData(String strCnn, String strCmd, String
strParentID)
{
DataGrid grid = (DataGrid) FindControl(strParentID);
String strKeyField = grid.DataKeyField;
int nP1 = (int) grid.DataKeys[grid.SelectedIndex];
StringBuilder sb = new StringBuilder(strCmd);
sb.Append(" WHERE ");
sb.Append(strKeyField);
sb.Append("=@p1");
strCmd = sb.ToString();
SqlConnection conn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand(strCmd, conn);
SqlParameter p = new SqlParameter("@p1", SqlDbType.VarChar);
p.Value = nP1;
cmd.Parameters.Add(p);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
</script>
Figure 5 HDataGrid using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace BWSLib
{
public class HDataGrid : DataGrid
{
// Constructor
public HDataGrid()
{
ConnectionString = String.Empty;
ParentGrid = String.Empty;
SqlCommandText = String.Empty;
DataRelation = String.Empty;
}
//////////////////////////////////////////////
/// PROPERTY: ConnectionString
public String ConnectionString
{
get {return (String) ViewState["ConnectionString"];}
set {ViewState["ConnectionString"] = value;}
}
//////////////////////////////////////////////
/// PROPERTY: SqlCommandText
public String SqlCommandText
{
get {return (String) ViewState["SqlCommandText"];}
set {ViewState["SqlCommandText"] = value;}
}
//////////////////////////////////////////////
/// PROPERTY: ParentGrid
public String ParentGrid
{
get {return (String) ViewState["ParentGrid"];}
set {ViewState["ParentGrid"] = value;}
}
//////////////////////////////////////////////
/// PROPERTY: DataRelation
public String DataRelation
{
get {return (String) ViewState["DataRelation"];}
set {ViewState["DataRelation"] = value;}
}
//////////////////////////////////////////////
/// OVERRIDE: DataBind
public override void DataBind()
{
if (DataSource != null)
{
base.DataBind();
return;
}
// DataSource has not been set yet and must be determined here
if (SqlCommandText != String.Empty &&
ConnectionString != String.Empty &&
ParentGrid != String.Empty)
{
DataGrid grid = (DataGrid) Page.FindControl(ParentGrid);
String strCmd = SqlCommandText;
StringBuilder sb = new StringBuilder(strCmd);
sb.Append(" WHERE ");
sb.Append(grid.DataKeyField);
sb.Append("=@p1");
strCmd = sb.ToString();
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(strCmd, conn);
SqlParameter p = new SqlParameter("@p1",
SqlDbType.VarChar);
p.Value = grid.DataKeys[grid.SelectedIndex];
cmd.Parameters.Add(p);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
DataSource = ds.Tables[0];
}
else
if (DataRelation != String.Empty &&
ParentGrid != String.Empty)
{
DataGrid grid = (DataGrid) Page.FindControl(ParentGrid);
DataView dvParent = (DataView) grid.DataSource;
DataView dvChild = dvParent
[grid.SelectedIndex].CreateChildView(DataRelation);
DataSource = dvChild;
}
base.DataBind();
}
}
}
Figure 6 Additional Properties <expo:HDataGrid id="detailGrid" runat="server"
connectionstring="DATABASE=northwind;SERVER=localhost;UID=sa;"
sqlcommandtext="SELECT et.territoryid, td.territorydescription
FROM employeeterritories AS et INNER JOIN
territories AS td ON
et.territoryid=td.territoryid"
parentgrid="masterGrid"
autogeneratecolumns="false"
font-size="x-small" font-names="verdana">
•••
<Columns>
<asp:BoundColumn DataField="territoryid"
HeaderText="ID" />
<asp:BoundColumn DataField="territorydescription"
HeaderText="Territory" />
</Columns>
</expo:HDataGrid>
|