最近看到看一篇关于GridView的文章!!感觉还不错,想和大家分享一下。。。
此程序实现的是选中GridView某一行后显示更多的信息。
(1)首先新建个页面,添加一个GridView控件,我以Products为例,这是源中的代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Pr_Id" DataSourceID="SqlDataSource1" EnableViewState="False"
onprerender="GridView1_PreRender">
<Columns>
<asp:BoundField DataField="Pr_Id" HeaderText="Pr_Id" InsertVisible="False"
ReadOnly="True" SortExpression="Pr_Id" />
<asp:BoundField DataField="Pr_Name" HeaderText="Pr_Name"
SortExpression="Pr_Name" />
<asp:CommandField ShowSelectButton="True" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT [Pr_Id], [Pr_Name] FROM [Products]">
</asp:SqlDataSource>
(2)在cs文件中,我们调用GridView1_PreRender的事件。此外我们还需要四个方法体:1, CreateRow();2,CreateColumn();3, CreateDetailsView();4, CreateDataSourceControl()。下面是代码:
DataKeyNames="Pr_Id" DataSourceID="SqlDataSource1" EnableViewState="False"
onprerender="GridView1_PreRender">
<Columns>
<asp:BoundField DataField="Pr_Id" HeaderText="Pr_Id" InsertVisible="False"
ReadOnly="True" SortExpression="Pr_Id" />
<asp:BoundField DataField="Pr_Name" HeaderText="Pr_Name"
SortExpression="Pr_Name" />
<asp:CommandField ShowSelectButton="True" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT [Pr_Id], [Pr_Name] FROM [Products]">
</asp:SqlDataSource>
(2)在cs文件中,我们调用GridView1_PreRender的事件。此外我们还需要四个方法体:1, CreateRow();2,CreateColumn();3, CreateDetailsView();4, CreateDataSourceControl()。下面是代码:
protected void GridView1_PreRender(object sender, EventArgs e)
{
if (GridView1.SelectedRow != null)
{
Table table = GridView1.SelectedRow.Parent as Table;
{
if (GridView1.SelectedRow != null)
{
Table table = GridView1.SelectedRow.Parent as Table;
if (table != null)
{
CreateRow(table,GridView1.SelectedIndex);
}
}
}
{
CreateRow(table,GridView1.SelectedIndex);
}
}
}
private void CreateRow(Table table, int index)
{
GridViewRow row = new GridViewRow(-1,-1,DataControlRowType.DataRow,DataControlRowState.Normal);
row.Cells.Add(CreateColumn());
table.Rows.AddAt(index+2,row);
}
{
GridViewRow row = new GridViewRow(-1,-1,DataControlRowType.DataRow,DataControlRowState.Normal);
row.Cells.Add(CreateColumn());
table.Rows.AddAt(index+2,row);
}
private TableCell CreateColumn()
{
TableCell tc = new TableCell();
tc.ColumnSpan = GridView1.Columns.Count;
tc.Width = Unit.Percentage(100);
{
TableCell tc = new TableCell();
tc.ColumnSpan = GridView1.Columns.Count;
tc.Width = Unit.Percentage(100);
DataSourceControl ds = CreateDataSourceControl();
tc.Controls.Add(ds);
tc.Controls.Add(CreateDetailsView(ds));
return tc;
}
tc.Controls.Add(ds);
tc.Controls.Add(CreateDetailsView(ds));
return tc;
}
private static DetailsView CreateDetailsView(DataSourceControl ds)
{
DetailsView dv = new DetailsView();
dv.AutoGenerateRows = true;
dv.DataSourceID = ds.ID;
return dv;
}
{
DetailsView dv = new DetailsView();
dv.AutoGenerateRows = true;
dv.DataSourceID = ds.ID;
return dv;
}
private DataSourceControl CreateDataSourceControl()
{
SqlDataSource ds = new SqlDataSource();
ds.ConnectionString = WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
ds.SelectCommand = "select * from Products where Pr_Id=@Pr_Id";
ds.ID = "SqlDataSource2";
{
SqlDataSource ds = new SqlDataSource();
ds.ConnectionString = WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
ds.SelectCommand = "select * from Products where Pr_Id=@Pr_Id";
ds.ID = "SqlDataSource2";
Parameter cp = new Parameter("Pr_Id",TypeCode.String,GridView1.SelectedValue.ToString());
ds.SelectParameters.Add(cp);
return ds;
}
ds.SelectParameters.Add(cp);
return ds;
}
(3)然后运行aspx文件,可以看到效果。
本文转自 王祖康 51CTO博客,原文链接:http://blog.51cto.com/wzk89/361619
,如需转载请自行联系原作者