请教,WebUserControl,DataGrid,DropDownList的问题

dafeng168 2006-10-09 11:58:00
WebUserControl1.ascx上有DataGrid1,
DataGrid1上有一个模板列DropDownList1,
我想在页面被打开时就把数据绑定到dropdownlist1上,请问怎么做?
我在DataGrid1_ItemDataBind事件中写e.Item.FindControl("DropDownList1"),这样都找不到控件,为什么?
还有,WebUserControl1.ascx是放在default.aspx的placehoder上,并是动态加载上去的.

自己晕了,问题好像很复杂,表达出来觉得不是很清楚.
...全文
149 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
purexiafeng 2006-10-09
  • 打赏
  • 举报
回复
代码贴出来,帮你看下
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
再顶
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
这里写错了ddlStatus.Items.Insert(i,i);

应该是
ddlStatus.Items.Insert(i,new ListItem(i.ToString(),i.ToString()));
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
按楼上的说法,解决问题了.

还有一个问题,
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataTable dt=(DataTable)ViewState["tblPro"];
DropDownList ddlStatus=(DropDownList)e.Item.FindControl("DropDownList1");
for(int i=0;i<5;i++)//假设只有5个
{
ddlStatus.Items.Insert(i,i);
}
ddlStatus.SelectedValue=dt.Rows[e.Item.ItemIndex]["Pid"].ToString();

}
}

//////
上面的ViewState["tblPro"]是在绑定DataGrid1时数据集,
DataTable上有字段PID,假如只有三行数据,分别2,3,5
问题出现在显示下拉列表时,被选中都是5这个值,请问是什么原因呢?要怎么解决


rocky99261 2006-10-09
  • 打赏
  • 举报
回复
Lcindep110正解
Lcindep110 2006-10-09
  • 打赏
  • 举报
回复
应该是
WebUserControl1.ascx.cs
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddlStatus=(DropDownList)e.Item.FindControl("DropDownList1");//找不到下拉列表
//ddlStatus.Items.Add(new ListItem("dasd","sdf"));
}
}
Lcindep110 2006-10-09
  • 打赏
  • 举报
回复
WebUserControl1.ascx
<asp:DataGrid id="DataGrid1">
<columns>
<asp:TemplateColumn >
<ItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</columns>
</asp:DataGrid>


WebUserControl1.ascx.cs
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.ItemType == ListItemType.Item || e.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddlStatus=(DropDownList)e.Item.FindControl("DropDownList1");//找不到下拉列表
//ddlStatus.Items.Add(new ListItem("dasd","sdf"));
}
}
yangang0201 2006-10-09
  • 打赏
  • 举报
回复
DataGrid1 中,你都没有数据绑定,怎么能够 触发 DataGrid1_ItemDataBound事件?
你调试下,呵呵,程序有没有进到 DataGrid1_ItemDataBound 这个时间这.
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
用for循环读取,性能不行啊.俺也是新手.
yangang0201 2006-10-09
  • 打赏
  • 举报
回复
呵呵,如果我做,就这么做.有点笨咯
先在 DataGrid1 中添一标记列,如ID,然后把这个ID 用数据填好.
然后 for一下,读取DataGrid1 的行数,
DropDownList ddlStatus=(DropDownList)this.DataGrid1.Rows[i].FindControl("DropDownList1").Items.add();
主要是指定行,就能够写了.
我是这么做的.新手,呵呵.
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
没有e.Item.rows[i]
yangang0201 2006-10-09
  • 打赏
  • 举报
回复
指定特定的行,就能够找到.不知道 有没有 e.Item.rows[i]这个
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
顶啊...急用.
dafeng168 2006-10-09
  • 打赏
  • 举报
回复
default.aspx.cs
placeholder1.Controls.Add("WebUserControl1.ascx");


WebUserControl1.ascx
<asp:DataGrid id="DataGrid1">
<columns>
<asp:TemplateColumn >
<ItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</columns>
</asp:DataGrid>


WebUserControl1.ascx.cs
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList ddlStatus=(DropDownList)e.Item.FindControl("DropDownList1");//找不到下拉列表
//ddlStatus.Items.Add(new ListItem("dasd","sdf"));
}

62,046

社区成员

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

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

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

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