完整的例子: ◆MyGrid.ascx: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="MyGrid.ascx.cs" Inherits="XsStudio.test.MyGrid" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%> <asp:DataGrid id="DataGrid1" runat="server" ShowHeader="False" AllowPaging="True" PageSize="3"></asp:DataGrid> ◆MyGrid.ascx.cs namespace test { using System; using System.Data; using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; /// <summary> /// MyGrid 的摘要说明。 /// </summary> public class MyGrid : System.Web.UI.UserControl { protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 } public void loaddata(string id) { DataTable dt = new DataTable(); dt.Columns.Add("SN"); dt.Columns[0].AutoIncrementSeed=1; dt.Columns[0].AutoIncrement = true; dt.Columns.Add("AAA"); dt.Columns.Add("BBB"); dt.Columns.Add("CCC"); dt.Rows.Add(new string[]{"1",id,"435689",System.DateTime.Now.ToString()}); dt.Rows.Add(new string[]{"2",id,"34535",System.DateTime.Now.ToString()}); dt.Rows.Add(new string[]{"3",id,"4456",System.DateTime.Now.ToString()}); dt.Rows.Add(new string[]{"4",id,"64563",System.DateTime.Now.ToString()}); dt.Rows.Add(new string[]{"5",id,"84535",System.DateTime.Now.ToString()}); this.DataGrid1.DataSource = dt; this.DataGrid1.DataBind(); ViewState[this.ClientID+"_id"] = id; } private void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e) { this.DataGrid1.CurrentPageIndex = e.NewPageIndex; loaddata(ViewState[this.ClientID+"_id"].ToString()); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器 /// 修改此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); this.DataGrid1.PageIndexChanged+=new DataGridPageChangedEventHandler(DataGrid1_PageIndexChanged); } #endregion } }
◆webform1.aspx: <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="XsStudio.test.WebForm1" validateRequest=false%> <%@ Register TagPrefix="uc1" TagName="MyGrid" Src="MyGrid.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm1</title> <META http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> <meta content="C#" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body bgColor="#cccccc" MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"> <ItemTemplate> <asp:TextBox id="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID") %>'></asp:TextBox> <asp:TextBox id="Textbox2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "smallPicPath") %>'></asp:TextBox> <uc1:MyGrid id="MyGrid1" runat="server"></uc1:MyGrid><br/> </ItemTemplate> </asp:DataList> </form> <script language="javascript"> </script> </body> </HTML> ◆webform1.aspx.cs: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Microsoft.Web.UI.WebControls; using System.Data.OleDb; namespace XsStudio.test { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlInputText Text1; protected System.Web.UI.WebControls.DataList DataList1; protected System.Web.UI.WebControls.RadioButtonList RadioButtonList1; private void Page_Load(object sender, System.EventArgs e) {
// 在此处放置用户代码以初始化页面 if(!IsPostBack) { DataTable tb = new DataTable(); tb.Columns.Add("ID"); tb.Columns.Add("smallPicPath"); tb.Columns.Add("Remark"); tb.Columns.Add("Name"); tb.Columns.Add("SupportCount"); tb.Columns.Add("gdzs"); tb.Columns.Add("BrowserCount"); tb.Rows.Add(new string[]{"001","dwef321","weaf","ewfa","1","12","ewf"}); tb.Rows.Add(new string[]{"002","geawef","gaweg","43ga4","1","21","weg"}); tb.Rows.Add(new string[]{"003","berg","gaweg","43ga4","1","21","weg"}); tb.Rows.Add(new string[]{"004","54wh","gaweg","43ga4","1","21","weg"}); tb.Rows.Add(new string[]{"005","baerg","gaweg","43ga4","1","21","weg"}); DataList1.DataSource = tb; DataList1.DataBind(); } } [page_break] private void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) { if(e.Item.ItemIndex>-1) { string id = ((TextBox)e.Item.FindControl("TextBox1")).Text; MyGrid tmpGrid = (MyGrid)e.Item.FindControl("MyGrid1"); tmpGrid.loaddata(id); } } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); this.DataList1.ItemDataBound+=new DataListItemEventHandler(DataList1_ItemDataBound); } #endregion } } 这个是我自己搞的: 在aspx文件里,是这样子套的 <asp:datalist id="DataList1" runat="server" RepeatColumns="3" RepeatDirection="Horizontal" Width="768" HorizontalAlign="Center"> <ItemTemplate> <TABLE id="Table3" cellSpacing="1" cellPadding="1" width="250" align="center" border="0"> <TR> <TD class="title_main"> <asp:Image id="Image1" ImageUrl="../images/dot.gif" Runat="server" ImageAlign="AbsMiddle"></asp:Image> <asp:hyperlink id=Hyperlink1 runat="server" NavigateUrl='<%# "../main/newtitle.aspx?cid=" + DataBinder.Eval(Container.DataItem, "tid") %>'> <%# DataBinder.Eval(Container.DataItem, "tna") %> </asp:hyperlink> </TD> </TR> <TR> <TD class="border" vAlign="top" height="150"> <asp:DataGrid id="DataGrid1" runat="server" HorizontalAlign="Center" Width="240px" AutoGenerateColumns="False" Font-Names="宋体" Font-Size="12px" GridLines="None" ShowHeader="False"> <Columns> <asp:HyperLinkColumn DataNavigateUrlField="cid" DataNavigateUrlFormatString="newcontent.aspx?cid={0}" DataTextField="title"></asp:HyperLinkColumn> </Columns> </asp:DataGrid> </TD> </TR> </TABLE> </ItemTemplate> </asp:datalist> 在cs文件中有这两个方法的 private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!IsPostBack) { //打开数据库 SqlConnection MyConnection=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["sqlconnectionstring"]); MyConnection.Open(); //打开表 string mysql; mysql="select tid,tna from new_type where iscatalog=0"; SqlCommand MyCommand=new SqlCommand(mysql,MyConnection); SqlDataReader dr=MyCommand.ExecuteReader(); //数据绑定 DataList1.DataSource=dr; DataList1.DataBind(); dr.Close(); MyConnection.Close(); } } private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) { //取tid string tid; //tid=e.Item.DataItem.GetType().ToString(); tid=((DbDataRecord)e.Item.DataItem).GetValue(0).ToString(); //Label mylabel=(Label)e.Item.FindControl("Label1"); //mylabel.Text=tid; //绑定数据 DataGrid mygrid=(DataGrid)e.Item.FindControl("DataGrid1"); SqlConnection MyConnection=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["sqlconnectionstring"]); MyConnection.Open(); string mysql; mysql="select top 10 cid,title from new_content where tid=" + tid; SqlCommand MyCommand=new SqlCommand(mysql,MyConnection); SqlDataReader dr=MyCommand.ExecuteReader(); mygrid.DataSource=dr; mygrid.DataBind(); dr.Close(); MyConnection.Close(); } 补充一下下,要这个的:using System.Data.Common; 在这里我发现的是DataGrid1.Item.DataItem的类型是和一开始时绑定它的方法有关的,我用了SqlDataReader来绑定数据,DataGrid1.Item.DataItem的类型就是System.Data.Common.DbDataRecord。我换了用DataTable来绑定时,就和msdn里的一样了,DataGrid1.Item.DataItem的类型是DbDataRecord DataGrid的数据绑定可以用好多方法啊,嘛干会这样子的呢?我想没透的就是嘛干会用没同的方法绑定数据,就会有没同的类型呢? DataGrid的数据绑定可以用好多方法啊,为什么会这样呢?我想不通为什么用不同的方法绑定数据会有不同的类型呢?
|