导航
  • 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
  • 问答

百分求助---动态创建数据控件的模板时,如何双向绑定。2.0中的bind

BoyPlusPlus 2006-11-03 12:05:03
一般应用都是设计时写在模板<%# Bind(...)%>
但在动态创建模板时如何实现

不能实现的话,如有这个东西的简单原理更好:)
http://community.csdn.net/Expert/topic/5129/5129164.xml?temp=.9395868
...全文
140 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoyPlusPlus 2006-11-04
3q
关键是控件是动态载入的。
看来得自己实现这部分了。
回复
CatChen 2006-11-04
你一定要动态加载,就写好在UserControl里面,因为ascx是可以写Bind的。之后你再用LoadControl动态加载ascx文件,就能达到你要的效果。
回复
CatChen 2006-11-03
如果你想知道写一句Bind之后ASP.NET编译器帮你生成了多少代码,你可以试着写一个用Bind的简单网页,编译,然后用Reflector看看生成的dll反编译回来的代码。
回复
CatChen 2006-11-03
Bind要复杂得多,在ASP.NET编译的时候如果见到Bind语句就自动生成双向的执行语句:
1.Output生成Eval语句,使用起来与Eval等效。
2.Input生成有关的更新代码,将控件数据提交给DataSource控件。

如果你要自己做,最好不要动态,把控件放到UserControl中用写好的Bind,然后你再动态调用该UserControl(用Page.LoadControl方法),这样该Bind就能够按照上述形式编译好,不需要你辛苦写代码。
回复
BoyPlusPlus 2006-11-03
3Q
但是大家所说的应该是1.1版本的Eval的实现

我问的是2.0中的Bind语法,该语法为双向绑定,即新值可以被数据源控件获取到。
Eval机制和Binder.Eval差不多。

便是新的Bind方法,不知MS是什么机制。如何动态实现。
回复
JackyBeauty 2006-11-03
Sub CreateColumn(ByVal ColumnName As String, Optional ByVal EditMode As Boolean = True, Optional ByVal columnHeaderName As String = "", Optional ByVal SpecialEditMode As Boolean = False)
Dim tc2 As New TemplateColumn()
If columnHeaderName = "" Then
columnHeaderName = ColumnName
ElseIf columnHeaderName = "0" Then
columnHeaderName = ""
End If
tc2.HeaderTemplate = New _
DataGridTemplate(ListItemType.Header, columnHeaderName)
tc2.ItemTemplate = New _
DataGridTemplate(ListItemType.Item, ColumnName)
If EditMode Then
tc2.EditItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, ColumnName)
Else
tc2.EditItemTemplate = New _
DataGridTemplate(ListItemType.Item, ColumnName)
End If
If SpecialEditMode Then
tc2.ItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, ColumnName)
End If
tc2.FooterTemplate = New _
DataGridTemplate(ListItemType.Footer, ColumnName)
Grid1.Columns.Add(tc2)
End Sub
'创建动态模板列的类
Private Class DataGridTemplate
Implements ITemplate
Dim templateType As ListItemType
Dim columnName As String
Sub New(ByVal type As ListItemType, ByVal ColName As String)
templateType = type
columnName = ColName
End Sub
Sub InstantiateIn(ByVal container As Control) _
Implements ITemplate.InstantiateIn
Dim lc As New LiteralControl
Select Case templateType
Case ListItemType.Header
lc.Text = "<B>" & columnName & "</B>"
container.Controls.Add(lc)
Case ListItemType.Item
lc.Text = "Item " & columnName
lc.ID = columnName
AddHandler lc.DataBinding, AddressOf Me.OnDataBinding
container.Controls.Add(lc)
Case ListItemType.EditItem
Dim tb As New TextBox()
tb.Text = ""
tb.Width = 20
tb.Style.Add("display", "none")
tb.ID = columnName
AddHandler tb.DataBinding, AddressOf Me.OnDataBinding
container.Controls.Add(tb)
Case ListItemType.Footer
lc.Text = "<I>Footer</I>"
container.Controls.Add(lc)
End Select
End Sub
Sub OnDataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim l As Object
If TypeOf (sender) Is TextBox Then
l = CType(sender, TextBox)
ElseIf TypeOf (sender) Is LiteralControl Then
l = CType(sender, LiteralControl)
End If
Dim Container As DataGridItem
Container = l.NamingContainer
l.Text = CType(Container.DataItem, DataRowView)(columnName).ToString()
End Sub
End Class

详细的可以加到我的群378276701来讨论

http://myweb.tugou.net 网络收藏夹
回复
supesa 2006-11-03
你可以换一种变通的方法.
在formview中先把捆绑好的textbox放在页面上
如果不需要,隐藏就好了
回复
zhuaiman 2006-11-03
这个事件名为 ItemDataBound
在窗体设计器生成的代码中注册
this.mDataGrid.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.mDataGrid_ItemDataBound);
回复
zhuaiman 2006-11-03
建议性的给你些参考
比如你的界面上有DataGrid 名字为mDataGrid

-------------------------------------------
private void mDataGrid_ItemDataBound(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
e.Item.DataItem提取你这一行绑定的数据集 并操作之
}
------------------------------------------
回复
zhuaiman 2006-11-03
顶者有分~
回复
BoyPlusPlus 2006-11-03
up
回复
BoyPlusPlus 2006-11-03
没人理,自己再顶。
回复
BoyPlusPlus 2006-11-03
比如动态创建Formview控件的模板时,如何实现双向绑定
即在设计期的<%# Bind %>功能。

如在模板里动态创建了一个TextBox控件,如何将text属性,双向绑定到数据源的某个字段上。



Eval语法可在dataBinding事件中进行处理,用Binder.Eval(...)
但2.0中的新bind()语法,不知怎么绑定。


顶....
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告