关于在FormView中的edit模式下查找SqlDataSource的问题?
程序中用到一个FormView1,在它的编辑模式下有一个下拉列表控件DropDownList1,
DropDownList1的邦定表达式:Bind( "name_id ")。
DropDownList1的数据源为一个SqlDataSource1(与DropDownList1都在edit模板内)。
SqlDataSource1的SQL为(SELECT dd_ID, dd_NAME FROM DXZ_TABLE WHERE (dd_ZB = @dd_ZB))
DropDownList1的DataTextField为dd_namae
DropDownList1的DataValueField为dd_id
==========================================================================
现在我要再FormView1进入编辑模式时对其中的DropDownList1所连接的SqlDataSource1进行过滤参数的赋值,于是我在FormView1_DataBound事件中加入如下代码:
Private Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
'数据连接
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings( "DDB ").ConnectionString())
If (FormView1.CurrentMode = FormViewMode.Edit) Then
Dim dzbCommand As SqlCommand
Dim dzbConnectionState As ConnectionState = conn.State
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
dzbCommand = New SqlCommand( "SP_dd_ID ", conn)
dzbCommand.CommandType = CommandType.StoredProcedure
dzbCommand.Parameters.Add( "@ddname ", SqlDbType.NVarChar, 50)
dzbCommand.Parameters.Item(0).Value = y_namev
Dim DXZ_DSs As SqlDataSource = CType(FormView1.FindControl( "SqlDataSource1 "), SqlDataSource)
DXZ_DSs.SelectParameters( "dd_ZB ").DefaultValue = CStr(dzbCommand.ExecuteScalar)
Finally
If dzbConnectionState = ConnectionState.Closed Then
conn.Close()
End If
End Try
End If
End Sub
=================================================================
出现的错误:
“DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value
首先声明:**** 要编辑的值在DropDownList1的selectvalue中绝对存在 *****
经过试验,
1、如果取消DropDownList1控件的Bind( "name_id "),则数据能够正常过滤并显示出来。(但是我要的是过滤后的数据)
2、如果取消SqlDataSource1的数据过滤,即SQL为(SELECT dd_ID, dd_NAME FROM DXZ_TABLE),并取消为过滤参数赋值,但不取消DropDownList1控件的Bind( "name_id "),也可以正常显示数据。
3、我在DXZ_DSs.SelectParameters( "dd_ZB ").DefaultValue = CStr(dzbCommand.ExecuteScalar)
这句设置断点,发现没有执行到这句就出现上面的错误:
---------------------------------
“DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value
---------------------------------
怀疑是不是当FormView1进入编辑模式时已有邦定数据到DropDownList1,但此时
FormView1_DataBound事件还没有执行才导致这样的错误发生。
求教,我要如何做才能达到目的呢?
即在FormView1进入编辑模式时DropDownList1显示已过滤后的数据,并自动将选择项与邦定项相同。
试了一天了,没找到方法,请教高手指点,谢谢
[解决办法]
最简单的建立第二个ddl和sqldatasource放在edit template里
[解决办法]
首先声明:**** 要编辑的值在DropDownList1的selectvalue中绝对存在 *****
=======
嘿嘿,偶看绝对不存在
看不懂你的代码
你得记住你保证 给 DropDownList 绑定列表项在 绑定其 Text 之前否则,否则自然是没有数据,绑定 Text 时自然没有办法找到项
[解决办法]
你进的是编辑模式,也就是说你要编辑的那条数据所对应的dropdownlist的值,已经存在数据库里了,可是由于某些原因,你修改了dropdownlist的值,所以数据库里存的那个值在下拉框中的值集合中是不存在的,去对应记录查看一下就明白了,一定是这问题。
[解决办法]
你是如何把值绑定/添加到DropDownList的?肯定是比FormView的绑定要晚了(相对于页面生命周期而言),因此FormView绑定就出错了。