模板列和UserControl结合的问题

majiye 2004-12-08 03:23:59
我做了以下步骤:
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:majiye88@hotmail.com
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
majiye 2004-12-09
  • 打赏
  • 举报
回复
<asp:TemplateColumn HeaderText="面板类型" FooterText="11111">
<ItemTemplate>
<asp:Label id=Label2 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.面板类型") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<uc1:ctlPanelType id=CtlPanelType1 runat="server" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.面板类型") %>'>
</uc1:ctlPanelType>
</EditItemTemplate>
</asp:TemplateColumn>
majiye 2004-12-09
  • 打赏
  • 举报
回复
<asp:TemplateColumn HeaderText="面板类型" FooterText="11111">
<ItemTemplate>
<asp:Label id=Label2 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.面板类型") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<uc1:ctlPanelType id=CtlPanelType1 runat="server" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.面板类型") %>'>
</uc1:ctlPanelType>
</EditItemTemplate>
</asp:TemplateColumn>
以上是模板列的代码。CtlPanelType是自己做的UserControl
majiye 2004-12-09
  • 打赏
  • 举报
回复
关于绑定,由于点“编辑”按钮也属于Post,因此没法根据这个判断。
另一方面,我试过把UserControl替换成普通的Text,绑定没有问题。
根据按F11跟踪的情况来看,代码都执行完之前一直是按预计的情况走的,但是最后结果不知道为什么UserControl的状态就是保存不下来,若用静态变量保存倒是可以,但是这里肯定不能用静态变量。
saucer 2004-12-09
  • 打赏
  • 举报
回复
你初始是怎么绑定DataGrid的?确认是在

if (!IsPostBack)
{
//here
}

里, 是的话,把编码贴出来
majiye 2004-12-09
  • 打赏
  • 举报
回复
注意AutoPostBack=true不管用,请继续关注,我用的是UserControl
codeangel 2004-12-08
  • 打赏
  • 举报
回复
DropDownList1.AutoPostBack=true,可能闪的太厉害了。
大户翁 2004-12-08
  • 打赏
  • 举报
回复
DropDownList1.AutoPostBack=true; 试试
majiye 2004-12-08
  • 打赏
  • 举报
回复
up

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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