DataGrid的模版列怎么用?

matu 2004-04-16 02:26:35
DataGrid的模版列怎么用?
...全文
31 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyalin 2004-04-16
  • 打赏
  • 举报
回复
这个结构有点像我们以前在Delphi中的主从表格一样,在主表格显示数据的同时,显示子表格的内容,明白了么?
huyalin 2004-04-16
  • 打赏
  • 举报
回复
比如说:页面上是一个DataList,从数据库中取出“影片类型”来显示,在每取出一个“影片类型”时,根据当前取出的“影片类型”取出“影片记录”
“影片类型”在DataList2中显示,在它的模板中再套一个Repeater(或DataList也行),在这个Repeater的模板中再显示影片记录

//这是DataList,用来显示所有的影片类型
<asp:datalist id="DataList2" runat="server" RepeatColumns="2" DataKeyField="类型ID" BorderColor="Tan" ForeColor="Black" BackColor="LightGoldenrodYellow" CellPadding="2" GridLines="Both" BorderWidth="1px">
//这是DataList的模板,这里套了一个表格和若干Web控件,其中一个Repeater
<ItemTemplate>
//这是一个表格,是事前设计好的
<TABLE width="300" border="0">
<TR>
//在这里显示当前类型中最新添加的影片,如动作片中最新添加的XX电影
//在模板中显示影片类型名称的链接,按URL参数方式传送到下一页面
<TD colSpan="2"><B>最新添加:</B> <A href='Movie.aspx?MovieType=<%# DataBinder.Eval(Container, "DataItem.类型ID")%>'>
<%# DataBinder.Eval(Container, "DataItem.类型名称")%>
</A>
</TD>
</TR>
<TR>
<TD width="150"><A id="Link1" runat="server" Target="_blank"><IMG id="Img1" height="90" alt="" src="" width="120" border="1" runat="server"></A>
<DIV align="center">
<asp:HyperLink id="LinkName" runat="server" Target="_blank"></asp:HyperLink></DIV>
</TD>
<TD vAlign="top" align="left">
//这是Repeater,用来显示当前类型中影片
<asp:Repeater id="Repeater1" runat="server">
//这是Repeater的模板
<ItemTemplate>
<div align="left">
//在模板中显示影片名称的链接,按URL参数方式传送到下一页面
<a href='MovieShow.aspx?MovieID=<%# DataBinder.Eval(Container, "DataItem.影片ID")%>' target=_blank>
<%# DataBinder.Eval(Container, "DataItem.影片名称")%>
</a>
</div>
</ItemTemplate>
//Repeater的模板结束
</asp:Repeater></TD>
</TR>
</TABLE>
</ItemTemplate>
//DataList的模板结
</asp:datalist>


代码:
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindList();//绑定数据到DataList
}
}

private void BindList()
{
OleDbConnection conn=(OleDbConnection)Session["conn"];
try
{
conn.Open();
//取出影片的类型
string sSel = "SELECT 类型ID, 类型名称,类型图片 FROM 类型";
OleDbDataAdapter da = new OleDbDataAdapter(sSel,conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataList2.DataSource=ds;
DataList2.DataBind();
}
finally
{
conn.Close();
}
}

//在影片类型绑定的同时,查询此类型的影片,并绑定到Repeater上
private void DataList2_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
//以DataList的关键字做查询,前提是DataList的关键字设置为类型ID
string sID = ((DataList)sender).DataKeys[(int)e.Item.ItemIndex].ToString();
OleDbConnection conn=(OleDbConnection)Session["conn"];
try
{
if (conn.State.ToString() !="Open") conn.Open();
//根据关键字(类型ID)查询此类型的影片
string sSel = "SELECT top 6 * FROM V_影片 Where 类型ID = " + sID +" Order by 更新时间 desc";
OleDbDataAdapter da = new OleDbDataAdapter(sSel,conn);
DataSet ds = new DataSet();
da.Fill(ds);
//因为Repeater在模板中,所以无法直接使用,只能通过查找控件的方式来使用
Repeater Repeater1 = (Repeater)e.Item.FindControl("Repeater1");
//将影片绑定到Repeater上显示
Repeater1.DataSource = ds;
Repeater1.DataBind();
//这一段是显示最新一条影片记录信息
//因为DataList绑定的影片类型,所以无法通过数据绑定的方式直接显示
//只能在这里查询后再将值绑定到模板的控件上显示
if (ds.Tables[0].Rows.Count >0)
{
//超链接控件,网页表示为<a href=""></a>的类型
HtmlAnchor lnk = (HtmlAnchor)e.Item.FindControl("Link1");
lnk.HRef ="MovieShow.aspx?MovieID=" + ds.Tables[0].Rows[0]["影片ID"].ToString();

//图片控件,网页表示为<img>
HtmlImage img = (HtmlImage)e.Item.FindControl("Img1");
img.Src= ds.Tables[0].Rows[0]["图片"].ToString();

//Web控件,ASP.net支持的类型
HyperLink linkName = (HyperLink)e.Item.FindControl("linkName");
linkName.NavigateUrl = "MovieShow.aspx?MovieID=" + ds.Tables[0].Rows[0]["影片ID"].ToString();
linkName.Text =ds.Tables[0].Rows[0]["影片名称"].ToString();
}

}
finally
{
conn.Close();
}
}

matu 2004-04-16
  • 打赏
  • 举报
回复
再麻烦一下,如果我要帮定数据怎么办
xicunfu 2004-04-16
  • 打赏
  • 举报
回复
9494,用zyw2833() 的方法,直接加入想要的控件,很方便的。
zyw2833 2004-04-16
  • 打赏
  • 举报
回复
<asp:TemplateColumn HeaderText="删除">

<ItemTemplate>

<asp:Button id="Button1" runat="server" Text="删除" CommandName="dele" BorderWidth="1px" ForeColor="Red"></asp:Button>

</ItemTemplate>

</asp:TemplateColumn>
listhome 2004-04-16
  • 打赏
  • 举报
回复
右击DATAGRIT
选 属性生成器!
加入一个模版列后.
确定!
还是右击DATAGRIT
选编辑模版列!
会用了吧!
matu 2004-04-16
  • 打赏
  • 举报
回复
比如说我要在该列中加如一个ImageButton,怎么加入,又怎么帮定图片,
ztx998 2004-04-16
  • 打赏
  • 举报
回复
建一个模板列后,里面可以放任何组件

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧