ASP.NET(vb)如何给datagrid中的一个dropdownlist赋值

hjzjnb 2011-01-18 09:39:06
<asp:DropDownList ID="drp_aa" runat="server" DataSource='<%# GetYear() %>' SelectedValue= '<%# DataBinder.Eval(Container, "DataItem.aa") %>' AutoPostBack="True"> </asp:DropDownList>年

"drp_aa"这个dropdownlist是在一个datagrid里的
我想通过GetYear()后台对它进行赋值
想通过循环,赋值是包括当前系统年份在内的4年

因为"drp_aa"是在一个datagrid里的,所以
Dim yIndex As Int16
For yIndex = Now.Year To Now.Year - 4 Step -1
drp_aa.Items.Add(New ListItem(yIndex, yIndex))
Next
drp_aa找不到目标

请大家帮帮忙 这个ASP.NET(vb)的代码怎么写 谢谢
...全文
187 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjzjnb 2011-01-18
  • 打赏
  • 举报
回复
前台 与楼上基本一致 就是 DropDownList ID="drp_aa" 里多了 SelectedValue= '<%# DataBinder.Eval(Container, "DataItem.aa") %>' 一项 因为读取时要选中数据库内对应存储的值

后台代码如下:
Protected Sub dgrNotice_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgrNotice.ItemCreated
If e.Item.ItemType = ListItemType.Pager Then
Dim yIndex As Int16
For yIndex = Now.Year To Now.Year - 4 Step -1
Dim ddl As DropDownList = CType(e.Item.FindControl("drp_aa"), DropDownList)
ddl.Items.Add(New ListItem(yIndex, yIndex))
Next
End If
End Sub

报错原因:e.Item.ItemType 的值为0,与ListItemType.Pager 不一致
导致if内代码不执行,由于前台有SelectedValue一项 所以报错无项可选

e.Item.ItemType 的值为0要如何解决?
如果去掉该行if的判断 也会报错 原因是在调用方法前先确认对象是否为null
randomfeel 2011-01-18
  • 打赏
  • 举报
回复
报什么错?


前台
在datagrid的columns里定义<asp:TemplateColumn>
然后写dropdownlist

大概是这样

<asp:DataGrid ID="dataGrid1" runat="server" AllowSorting="True" AutoGenerateColumns="False" Width="100%">
<Columns>
<asp:TemplateColumn>
<ItemStyle Wrap="False" />
<ItemTemplate>
<asp:DropDownList ID="drp_aa" runat="server" AutoPostBack="True"> </asp:DropDownList>
</ItemTemplate>
<HeaderStyle Width="10%" Wrap="False" />
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

wuyq11 2011-01-18
  • 打赏
  • 举报
回复
private void DataGrid1_ItemDataBound(object sender,DataGridItemEventArgs e)
{
string sql = " ";

if(e.Item.ItemType==ListItemType.EditItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl( "Procedure ");
dropdownlistBindData.BindData(ddl,sql, "name ",conn);

try
{
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem, "存储过程名 "))).Selected=true;//选择数据库内的作为默认
}catch{}
}
if(e.Item.ItemType==ListItemType.Footer)
{
DropDownList ddl=(DropDownList)e.Item.FindControl( "ddl");
dropdownlistBindData.BindData(ddl,sql, "",conn);
}
}

hjzjnb 2011-01-18
  • 打赏
  • 举报
回复
3楼的 是这样吗?
前台:
<asp:DropDownList ID="drp_aa" runat="server" SelectedValue= '<%# DataBinder.Eval(Container, "DataItem.aa") %>' AutoPostBack="True"> </asp:DropDownList>年

后台:
Protected Sub dgrNotice_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgrNotice.ItemCreated

Dim yIndex As Int16
Dim ddl As DropDownList = CType(e.Item.FindControl("drp_aa"), DropDownList)
For yIndex = Now.Year To Now.Year - 4 Step -1
ddl.Items.Add(New ListItem(yIndex, yIndex))
Next
End Sub

这样会报错 要怎么改?
dicklee1214 2011-01-18
  • 打赏
  • 举报
回复
foreach (control cr in datagrid.controls)
{
if cr.type() = system.web.......dropdownlist
{
if (cr.name == "你要的")
{
绑定数剧源
}
}
}
randomfeel 2011-01-18
  • 打赏
  • 举报
回复
在dataGrid1.ItemCreated事件里写

Dim ddl As DropDownList = CType(e.Item.FindControl("drp_aa"), DropDownList)
ddl.Items.Add(New ListItem(yIndex, yIndex))
cqdyh 2011-01-18
  • 打赏
  • 举报
回复
DataGrid.ItemDataBound

_ItemDataBound(sender as object, e as DataGridItemEventArgs)
...
DropDownList dropdownlist1 = (DropDownList)e.Item.FindControl("dropdownlist1");
  • 打赏
  • 举报
回复
findControl
hjzjnb 2011-01-18
  • 打赏
  • 举报
回复
对象里面加一列 把你的数据存进去 自己绑定就可以了

请问能给我一段Page Language="VB"的示例代码吗 谢谢
hjzjnb 2011-01-18
  • 打赏
  • 举报
回复
我是<%@ Page Language="VB"的
是这样的:

Dim ddl As DropDownList = CType(e.Item.FindControl("drp_aa"), DropDownList)
西门喷血 2011-01-18
  • 打赏
  • 举报
回复
在后台赋值把 对象里面加一列 把你的数据存进去 自己绑定就可以了
loveheronly 2011-01-18
  • 打赏
  • 举报
回复
前台设置dropdownlist1 AutoPostBack="True"---后台用DropDownList dropdownlist1 = (DropDownList)e.Item.FindControl("dropdownlist1");
hjzjnb 2011-01-18
  • 打赏
  • 举报
回复
一样的 e.Item.ItemType 还是<> ListItemType.EditItem
randomfeel 2011-01-18
  • 打赏
  • 举报
回复
那你换成DataGrid1_ItemDataBound事件试试?

If e.Item.ItemType = ListItemType.EditItem Then

62,046

社区成员

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

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

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

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