为什么datalist的itemcreated事件里生成的datalist的id固定不了,总是要带上父datalist的id
解决方案 »
- vs2008找不到工具箱的XML 架构选项卡
- 求一个源码,DIV+CSS+JS的弹出窗口
- VS2008中出FreeTextBoxControls.FreeTextBox的控件FreeTextBox1必须放在具有runat=server 的窗体标记内
- asp.net(c#)Ajax安全沙箱问题
- 返回查询页面并保持原来的查询条件和数据
- 推荐一本SharePoint书吧
- 反射问题!
- 关于Excel导入Sql数据库,执行数据导入某列值丢数据(原字段有数值但导入后为空),但总的记录数导入是正确。郁闷!!
- **求助!!可以控制让一列datagrid里面的linkbutton不显示出来吗?谢谢!
- dom 中如何遍里一个指定的节点?
- 菜单控件
- 紧急求助ASP.NET中控件位置微调方法,在线等!
INamingContainer是一个没有方法的标记接口,当控件在实现INamingContainer时,ASP.NET页框架可在该控件下创建新的命名范围,因此能够确保子控件在控件的分层树中具有唯一的名称。
生成的id类似dlOne__ctl0_dlTwo_0 dlOne__ctl1_dlTwo_1 dlOne__ctl1_dlTwo_2
private void dgList_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if ( e.Item.ItemIndex < 0 )
{
return;
} e.Item.FindControl("ID");
}其中 ID 是dlTwo,不需要写dlOne__ctl0_dlTwo_0
DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
DataList1_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
DataList1_DeleteCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
DataList1_CancelCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
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 System.IO;namespace HNAS.IMP.IMPVoteWebUI
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataList dlOne;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.HtmlControls.HtmlTable TableTitle; ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("ProjectValue", typeof(string)));
for (int i = 0; i < 2; i++)
{
dr = dt.NewRow();
dr[0] = "分项 " + i.ToString();
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
} ICollection CreateDataSource2(int i)
{
DataTable dt = new DataTable();
DataRow dr;
if(i<0) i = 0;
dt.Columns.Add(new DataColumn("QuestionValue",typeof(string)));
for(int m=0;m<2;m++)
{
dr = dt.NewRow();
dr[0] = "选项 " + m.ToString();
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
} public void Page_Load(Object sender, EventArgs e)
{
dlOne.DataSource = CreateDataSource();
dlOne.DataBind(); this.dlOne.ItemCreated += new DataListItemEventHandler(dlOne_ItemCreated); this.DataBind();
}
public void dlOne_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
// if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
// {
DataList dl = new DataList(); dl.ID = "dlTwo_"+e.Item.ItemIndex.ToString();
dl.ItemTemplate = new myTemp1();
dl.DataSource = CreateDataSource2(e.Item.ItemIndex );
dl.DataBind();
e.Item.Controls.Add (dl);
// }
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{
//在这里怎么能找到dlTwo? 这样找不到
for(int i=0;i<dlOne.Items.Count;i++)
{
DataList dl = (DataList)dlOne.Items[i].FindControl("dlTwo_"+i.ToString);
}
}
} public class myTemp1 : ITemplate
{
static int itemcount;
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
itemcount += 1;
container.Controls.Add(lc);
}
public void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
Literal lc;
lc = (Literal) sender;
DataListItem container = (DataListItem )lc.NamingContainer;
lc.Text += "<tr><td>";
lc.Text += DataBinder.Eval(container.DataItem, "QuestionValue");
lc.Text += "</TD></TR>";
}
}
}
页面代码如下:
<%@ Register TagPrefix="HNAS" Namespace="HNAS.IMP.WebComponents" Assembly="HNAS.IMP.WebComponents" %>
<%@ Page language="c#" Codebehind="test1.aspx.cs" AutoEventWireup="false" Inherits="HNAS.IMP.IMPVoteWebUI.test1" %>
<HTML>
<script language="C#" runat="server"> </script>
<body>
<form runat="server">
<table id="TableTitle" runat="server" width="100%" border="1">
<tr>
<td height="10">
调查主题
</td>
</tr>
</table>
<asp:datalist id="dlOne" runat="server" RepeatDirection="Horizontal" Width="100%" Font-Size="8pt"
BorderWidth="1" GridLines="Both" RepeatColumns="1" RepeatLayout="Table" Font-Name="Verdana"
CellPadding="3" BorderColor="black">
<SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>
<HeaderStyle BackColor="#aaaadd"></HeaderStyle>
<AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ProjectValue") %>
</ItemTemplate>
</asp:datalist>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
<asp:DataList id="DataList1" runat="server">
<ItemTemplate>
<asp:DataList id="Datalist2" runat="server"></asp:DataList>
</ItemTemplate>
</asp:DataList>public void dlOne_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList dataList = (DataList)e.Item.FindControl("Datalist2");
....
}
public void dlOne_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList dl = new DataList();
dl.ID = "dlTwo_"+e.Item.ItemIndex.ToString();
...
}
public void dlOne_ItemCommand(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
string ID = "dlTwo_"+e.Item.ItemIndex.ToString();
DataList dl = (DataList)e.Item.FindControl("ID");
}2、由于你的 DataList 是动态生成的,设计到控件生命周期的问题与视图状态的问题(解释起来又罗嗦了)