“DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。

jackrong427 2006-07-21 11:10:28
下面的代码老是提示
“DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: “DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value

我是想把depid数字显示为部门编号,但是不知道为什么老是提示上面的错误,搞不清了,大家帮忙看看


<asp:FormView ID="FormView1" runat="server" AllowPaging="True" DataKeyNames="ID"
DataSourceID="SqlDataSource1">
<EditItemTemplate>
ID:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
UserName:
<asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox><br />
PassWD:
<asp:TextBox ID="PassWDTextBox" runat="server" Text='<%# Bind("PassWD") %>'></asp:TextBox><br />
depname:
<asp:TextBox ID="depnameTextBox" runat="server" Text='<%# Bind("depname") %>'></asp:TextBox><br />
depid:
<asp:TextBox ID="depidTextBox" runat="server" Text='<%# Bind("depid") %>'></asp:TextBox>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" SelectedValue='<%# Bind("depid") %>'
DataTextField="depid" DataValueField="depid" >
</asp:DropDownList><br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
Text="更新"></asp:LinkButton>
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消"></asp:LinkButton>
</EditItemTemplate>
<InsertItemTemplate>
UserName:
<asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>'>
</asp:TextBox><br />
PassWD:
<asp:TextBox ID="PassWDTextBox" runat="server" Text='<%# Bind("PassWD") %>'>
</asp:TextBox><br />
depname:
<asp:TextBox ID="depnameTextBox" runat="server" Text='<%# Bind("depname") %>'>
</asp:TextBox><br />
depid:
<asp:TextBox ID="depidTextBox" runat="server" Text='<%# Bind("depid") %>'>
</asp:TextBox><br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
Text="插入">
</asp:LinkButton>
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消">
</asp:LinkButton>
</InsertItemTemplate>
<ItemTemplate>
ID:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
UserName:
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Bind("UserName") %>'></asp:Label><br />
PassWD:
<asp:Label ID="PassWDLabel" runat="server" Text='<%# Bind("PassWD") %>'></asp:Label><br />
depname:
<asp:Label ID="depnameLabel" runat="server" Text='<%# Bind("depname") %>'></asp:Label><br />
depid:
<asp:Label ID="depidLabel" runat="server" Text='<%# Bind("depid") %>'></asp:Label><br />
<asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"
Text="编辑">
</asp:LinkButton>
<asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除">
</asp:LinkButton>
<asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
Text="新建">
</asp:LinkButton>
</ItemTemplate>
</asp:FormView>
   <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:jbwebschoolConnectionString %>" DeleteCommand="DELETE FROM [FT_User] WHERE [ID] = @original_ID"
InsertCommand="INSERT INTO [FT_User] ([UserName], [PassWD], [depname], [depid]) VALUES (@UserName, @PassWD, @depname, @depid)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [ID], [UserName], [PassWD], [depname], [depid] FROM [FT_User]"
UpdateCommand="UPDATE [FT_User] SET [UserName] = @UserName, [PassWD] = @PassWD, [depname] = @depname, [depid] = @depid WHERE [ID] = @original_ID">
<DeleteParameters>
<asp:Parameter Name="original_ID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="UserName" Type="String" />
<asp:Parameter Name="PassWD" Type="String" />
<asp:Parameter Name="depname" Type="String" />
<asp:Parameter Name="depid" Type="Int32" />
<asp:Parameter Name="original_ID" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="UserName" Type="String" />
<asp:Parameter Name="PassWD" Type="String" />
<asp:Parameter Name="depname" Type="String" />
<asp:Parameter Name="depid" Type="Int32" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:jbwebschoolConnectionString %>"
SelectCommand="SELECT [depid], [depname], [deptype], [depnumber] FROM [dep]"></asp:SqlDataSource>
...全文
2853 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleepcraft 2006-11-19
  • 打赏
  • 举报
回复
DROPDOWNLIST的绑定还是最好放在后台
然后数据库不匹配的问题我是这样解决的
首先是dropdownlist的绑定,没有使用DATASET的方式,而是采用sqldatareader,这里效率应该比dataset高
///////////////////////////////////////
Dim dlctype As SqlDataReader
dlctype = ......(取出sqldatareader)
Do While dlctype.Read
Me.dl_ctype.Items.Add(New ListItem(dlctype("id"), dlctype("name")))
Loop
Me.dl_ctype.Items.Insert(0, New ListItem("未分类", 0))
dlctype.Close()
/////////////////////////////////
dropdownlist的赋值,如果没有匹配值,则增加一个值
///////////////////////////////////
Try
Me.dl_ctype.SelectedValue = Reader("name")
Catch ex As Exception
Me.dl_ctype.Items.Insert(1, New ListItem(Reader("id"), Reader("name")))
Me.dl_ctype.SelectedValue = Reader("ctype")
End Try
yyw84 2006-11-19
  • 打赏
  • 举报
回复
在DropDownList的DataBind事件里面写this.DropDownList1.SelectedValue = XXX;
dick78 2006-11-19
  • 打赏
  • 举报
回复
从报错上看是没有找到匹配的数据。
DropDownList1.SelectedIndex=DropDownList1.Item.IndexOf(DropDownList1.Item.FindByText("部门名称"));能达到同样的效果,但条件是DropDownList1的text中必须的有“部门名称”这个数值。
dick78 2006-11-19
  • 打赏
  • 举报
回复
为DropDownList1的SelectedValue属性付的数值的前提是DropDownList1中已经存在这个数据值,付值实际上是找到匹配的数值然后使其成为当前选中的数值显示出来..
vAction 2006-11-18
  • 打赏
  • 举报
回复
强烈关注中!的确没有找到一个有效的方法。
主要问题出在,GRIDVIEW所bind的数据库中的值,在dropdownlist中找不到,查了资料说是因为sql出来的值("abc ")前后有空格,所以和dropdownlist中的值("abc")不匹培造成,如何解决我也一直没有找到方法。
loveWife 2006-07-24
  • 打赏
  • 举报
回复
myLanmu.SearchPDName();
dl_pdname.DataTextField = "lm_name";
dl_pdname.DataValueField = "lm_id";
dl_pdname.DataSource = myLanmu.DataSource;
dl_pdname.DataBind();

DropDownList 绑顶数据很简单,你怎么搞得那么麻烦?
Brookes 2006-07-24
  • 打赏
  • 举报
回复
Eddie005(♂) №.零零伍 (♂)
完全正确,SelectedValue当然可以绑定赋值,说不可以的同学自己试试吧,不知道被谁误了

lz代码看不出问题,只能是你数据源返回的值确实不在DrowDownList的列表中(注意null),可以试着监控该值

或者,DropDownList或FromView 的Binding事件中写代码处理,试着用DropDownList.Items.FindByValue(v)查找item




wsxcy66668888 2006-07-24
  • 打赏
  • 举报
回复
你的DropDownList1是放在一个模板列中吗,如果是,请将sqldatasoure放入模板中
Eddie005 2006-07-21
  • 打赏
  • 举报
回复
to 楼上:

即便您说地球是方的那就是方的了,偶无意跟您争论,但是,为什么你就连打开.net framework sdk 或者写一行代码验证一下这么简单的事都不愿意做呢?

==============================================================================
.NET Framework 类库

ListControl.SelectedValue 属性请参见
ListControl 类 | ListControl 成员 | System.Web.UI.WebControls 命名空间 | SelectedItem | SelectedIndex | DataValueField | Items | ListItem | System.ArgumentOutOfRangeException | C++ 托管扩展编程
要求
平台: Windows 2000, Windows XP Professional, Windows Server 2003 系列
语言
C#

C++

JScript

Visual Basic

全部显示
注意:此命名空间、类或成员仅在 .NET Framework 1.1 版中受支持。
获取列表控件中选定项的值,或选择列表控件中包含指定值的项。

[Visual Basic]
Public Overridable Property SelectedValue As String

[C#]
public virtual string SelectedValue {get; set;}

[C++]
public: __property virtual String* get_SelectedValue();
public: __property virtual void set_SelectedValue(String*);

[JScript]
public function get SelectedValue() : String;
public function set SelectedValue(String);

属性值
列表控件中选定项的值。默认值为空字符串 ("")。

异常
异常类型 条件
ArgumentOutOfRangeException SelectedValue 属性的设定值与列表控件中的项不相符。

备注
通常使用 SelectedValue 属性确定列表控件中选定项的值。如果未选定任何项,则返回一个空字符串 ("")。

SelectedValue 属性还可以用于选择列表控件中的某一项,方法是用该项的值设置此属性。如果列表控件中的任何项都不包含指定值,则会引发 System.ArgumentOutOfRangeException。

..........
fellowcheng 2006-07-21
  • 打赏
  • 举报
回复
页面上 SelectedValue='<%# Bind("depid") %>' 应该是可以的
hzw66 2006-07-21
  • 打赏
  • 举报
回复
俺也要强调:
SelectedValue不能赋值,用SelectedIndex
Eddie005 2006-07-21
  • 打赏
  • 举报
回复
偶上面已经强调了:
SelectedValue='<%# Bind("depid") %>' 这个绑定语法完全是正确的!

上面有其他说法的兄弟们要注意更正自己原先错误的理解了。
hzw66 2006-07-21
  • 打赏
  • 举报
回复
SelectedValue不能赋值,用SelectedIndex
ncjcz 2006-07-21
  • 打赏
  • 举报
回复
SelectedValue='<%# Bind("depid") %>'
这句有问题,Bind("depid")得到的结果在你数据源的deptid里肯定没有
lw7210 2006-07-21
  • 打赏
  • 举报
回复
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" SelectedValue='<%# Bind("depid") %>'
DataTextField="depname" DataValueField="depid" >
Eddie005 2006-07-21
  • 打赏
  • 举报
回复
这个绑定并没有任何问题,很可能是测试数据的问题:[FT_User]表中有些行的deptid在[dep]表中不存在或者值为<null>
疯狂秀才2018 2006-07-21
  • 打赏
  • 举报
回复
DataTextField="depName" DataValueField="depid"


Bind("depid") 这个方法返回一个DATATABLE吗
jackrong427 2006-07-21
  • 打赏
  • 举报
回复
刚刚写错了:我是想把depid数字显示为部门名称,但是不知道为什么老是提示上面的错误,搞不清了,大家帮忙看看

62,050

社区成员

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

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

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

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