请教如何取得页面中DropDownList当前的值?

suppgo 2003-01-20 03:32:25
我在DataGrid中绑定一个DropDownList列,然后一在Page中添加一个提交的Button,想实现在这个Button的单击事件中取得当前DropDownList列中值。
部分源代码:
1)tmp.aspx:(绑定该列的代码)
<asp:TemplateColumn HeaderText="性别">
<ItemTemplate>
<asp:DropDownList Runat="server" ID="DropDownList1"> <asp:ListItem Value="0">男</asp:ListItem> <asp:ListItem Value="1">女</asp:ListItem> </asp:DropDownList>

</ItemTemplate>
</asp:TemplateColumn>


2)tmp.aspx.cs:
Button_Click中的代码:
private void Button1_Click(object sender, System.EventArgs e)
{
DropDownList DropList1 = new DropDownList();
DropList1 = (DropDownList)Page.FindControl("DropDownList1");
string str = DropList1.SelectedItem.Text; // 出错行:
}

当点击这个Button按钮时报错如下:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。


请问如何修改才能取得当前该DropDownList的值?
谢谢!



...全文
92 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
suppgo 2003-01-22
  • 打赏
  • 举报
回复
谢谢各位!已经通过了!
请接分吧!
OutcastXP 2003-01-21
  • 打赏
  • 举报
回复
这是我用VB写的一段代码,不知对你有没有帮助
Public Sub GetChangeClass(ByVal sender As Object, ByVal e As System.EventArgs)
Dim cboChangeClass As DropDownList
Dim cboChangeItem As DropDownList
Dim adoRdr As OleDbDataReader
Dim i As Integer = 0

cboChangeClass = myGrid1.Items.Item(0).FindControl("Edit_CHANGECLASS")
cboChangeItem = myGrid1.Items.Item(0).FindControl("Edit_CHANGEITEM")
cboChangeItem.Items.Clear()

strSQL = "select STAPLE from DISNSTAPLE where FIXCLASS = '" _
& cboFIXCLASS.SelectedItem.Text & "' and WORKCLASS = '" _
& cboChangeClass.SelectedItem.Text & "'"
adoCon = New OleDbConnection(pStrCon)
adoCon.Open()
Dim adoCmd As New OleDbCommand(strSQL, adoCon)
adoRdr = adoCmd.ExecuteReader()
While adoRdr.Read()
cboChangeItem.Items.Add(adoRdr.Item(0))
i = i + 1
End While
adoRdr.Close()
adoCon.Close()
End Sub
windyyang 2003-01-21
  • 打赏
  • 举报
回复
string selected ValueDropist1 =SelectedItem.Text;
yohomonkey 2003-01-21
  • 打赏
  • 举报
回复
dpl的帮定数据的可以是text和value;
请确认你的数据是帮定到那个里面的;
ahui_net 2003-01-21
  • 打赏
  • 举报
回复
up
songzx66 2003-01-21
  • 打赏
  • 举报
回复
是打错字了,应该是
string str = DropList1.Items[DropList1.SelectedIndex].Value;
snla 2003-01-20
  • 打赏
  • 举报
回复
如果你已把控件拖到了页面上,就不用new了
直接用DropDownList1.SelectedItem.Text就行了
suppgo 2003-01-20
  • 打赏
  • 举报
回复
请问songzx66的是DropClass是什么?谢谢!
songzx66 2003-01-20
  • 打赏
  • 举报
回复
for(int i=0;i<DataGrid1.Items.Count;i++)
{
DropDownList DropList1=(DropDownList)DataGrid1.Items[i].FindControl("DropDownList1");
string str = DropList1.Items[DropClass.SelectedIndex].Value;
Response.Write(str);
}
suppgo 2003-01-20
  • 打赏
  • 举报
回复
谢谢各位!但是我用如下语句还是取得值为空,请问为什么?
private void Button1_Click(object sender, System.EventArgs e)
{
for(int i=0;i<DataGrid1.Items.Count;i++)
{
DropDownList DropList1=(DropDownList)DataGrid1.Items[i].FindControl("DropDownList1");
string str = DropList1.SelectedItem.Value;
Response.Write(str);
}

}

或者用DropList1 = (DropDownList)datagrid1.items[0].cells[0].controls[0]
则报错:Index 超出范围!

请问该如何是好??
latahu 2003-01-20
  • 打赏
  • 举报
回复
好像没错,改成DropList1 = (DropDownList)datagrid1.items[0].cells[0].controls[0]试试;假设在第一行,第一列
tangjun 2003-01-20
  • 打赏
  • 举报
回复
你就用DropDownList1.SelectedItem.Text不行吗?一定要用FindControl吗?
letian 2003-01-20
  • 打赏
  • 举报
回复

try

for(int i=0;i<datagrid1.Items.Count;i++)
{

DropDownList DropList1=(DropDownList)datagrid1.Items[i].FindControl("DropDownList1");
string str = DropList1.SelectedItem.Text;
}

62,074

社区成员

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

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

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

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