我做了以下步骤:
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.创建了一个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]
<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
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