我做了以下步骤:
1.创建了一个UserControl,里面只有DropDownList一个控件,包装了数据绑定的东西,并添加了一个SelectedValue属性,设置其为Bindable(添加[System.ComponentModel.Bindable(true)]和get、set方法)。
2.创建了一个WebForm,主要是一个DataGrid,将第1步做的UserControl放到它的模板列中,在页面中模板列部分代码如下:
<EditItemTemplate>
    <uc1:ctlPanelType id=CtlPanelType1 runat="server" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "paneltype") %>'>
    </uc1:ctlPanelType>
</EditItemTemplate>问题是运行时,点了编辑按钮后,UserControl中的下拉框总是定位在最上面一个值,而没有绑定到数据库中实际的值。若把UserControl替换成Text,则没有问题。调试过程中跟踪到执行顺序为:
页面.Page_Load => DataGrid1_EditCommand => UserControl.Page_Load => 页面.模板列绑定 => UserControl.新增属性的set事件怀疑自己哪里代码没写全或是写法不对,这个问题已经花了好长时间调试不出,请高人指教,有愿意指教的我可以提供代码,重谢。QQ:50408    MSN:[email protected]

解决方案 »

  1.   

    参考一下这个代码: .aspx 
    <asp:DropDownList id="edit_GradeList" DataSource ='<%# UserDataSet.Tables("Grade") %>' DataTextField="gradename" DataValueField="gradeid" SelectedIndex='<%# Change_Grade( DataBinder.Eval(Container.DataItem,"gradeid") )%>' runat="server" Width="88px">'.aspx.vb  用于显示用户级别的 selectindex
    public Function Change_Grade(ByVal intGradeID As Integer) As Integer        Dim GradeTable As DataTable = UserDataSet.Tables("Grade")
            Dim row As DataRow
            Dim I As Integer = 0
            For Each row In GradeTable.Rows
                If intGradeID = CInt(row(0)) Then
                    Return I
                End If
                I += 1
            Next
        End Function
      

  2.   

    问题是我用的是UserControl,不是DropDownList。
      

  3.   

    “问题是运行时,点了编辑按钮后,
    UserControl中的下拉框总是定位在最上面一个值,而没有绑定到数
    据库中实际的值。若把UserControl替换成Text,则没有问题。”我的理解:
    当要进行编辑某条记录的时候,在DataGrid里的UserControl里的
    DropDownList显示的值和数据库里的值不匹配(即:都一样)。
    分析:
    一、DataGrid1_EditCommand 事件里 e.Item.Cells["ID"].Text ----所要编
    辑记录的ID,应传递到UserControl里的DropDownList的
    dropDownList.DataValueField = dataSet.Tables[0].Columns["ID"];
    //////注意:数据源要进行排序的!数据源的第一条记录应是你 
    //////ID = e.Item.Cells["ID"].Text ********************关键!!
    dropDownList.DataTextField = dataSet.Tables[0].Columns["Name"];
    二、可以直接将其转换成DropDownList 
    (DropDownList)(e.Item.Cells["要转换的列"].Controls[0])).Value
    (DropDownList)(e.Item.Cells["要转换的列"].Controls[0])).Text