学院首页>网络编程>ASP>DataList里套DataGrid,DataBind

DataList里套DataGrid,DataBind

作者: 来源: 添加时间:2006-5-21 18:40:06
  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的数据绑定可以用好多方法啊,为什么会这样呢?我想不通为什么用不同的方法绑定数据会有不同的类型呢?

第 2 页,共 2 页 [1] [2]
站内搜索