一直没注意,前天有位网友告诉我,他找相关的文章,在Google里搜索第一条就是我的这篇了 有点意外...
但是他们都遇到一个相同的问题,就是,完成后,DataList显示是正确的,里面的GridView却没显示出来... 我因为也没空,所以只是回答他们,让他们自己调试下,看问题在哪里
刚才又有一个网友问了我同样的问题... 闲来就自己重新写了个小测试程序
这是前台:
Code
<asp:DataList ID="dataList" runat="server" DataKeyField="ID" OnItemDataBound="dataList_ItemDataBound">
<ItemTemplate>
<%# Eval("Name") %>
<asp:GridView ID="gridView" runat="server">
</asp:GridView>
</ItemTemplate>
</asp:DataList>
这是后台:
Code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable table = CreateDataTable(new string[] { "ID", "Name" });
InsertData(table, new string[] { "1", "Hello" });
InsertData(table, new string[] { "2", "World" });
dataList.DataSource = table;
dataList.DataBind();
}
}
protected void dataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string id = dataList.DataKeys[e.Item.ItemIndex].ToString();
GridView gv = e.Item.FindControl("gridView") as GridView;
GridViewDataBind(gv, id); // 现在ID 没用到
}
}
// 现在ID 没用到
private void GridViewDataBind(GridView gv, string id)
{
DataTable table = CreateDataTable(new string[] { "ID", "Name" });
InsertData(table, new string[] { "11", "Hello" });
InsertData(table, new string[] { "12", "World" });
gv.DataSource = table;
gv.DataBind();
}
DataTable CreateDataTable(string[] columns)
{
DataTable table = new DataTable();
foreach(string column in columns)
{
table.Columns.Add(column, typeof(string));
}
return table;
}
void InsertData(DataTable table, string[] values)
{
DataRow row = table.NewRow();
for (int i = 0; i < values.Length; i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
}
工作正常。
但是,我也遇到了一个问题,就是前台不使用 OnItemDataBound="dataList_ItemDataBound" 的方式,在Page_Load事件里面 添加如下代码的时候
Code
dataList.ItemDataBound += new DataListItemEventHandler(dataList_ItemDataBound);
dataList_ItemDataBound 这个事件居然没执行... 晕~~
原因是哪里,我现在也不知道,有知道的朋友告诉我下哈... 嘿嘿
顺便附上 源代码