首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于在FormView中的edit模式下查找SqlDataSource的有关问题

2012-03-07 
关于在FormView中的edit模式下查找SqlDataSource的问题?程序中用到一个FormView1,在它的编辑模式下有一个

关于在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绑定就出错了。

热点排行