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

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

不能实现的话,如有这个东西的简单原理更好:)
http://community.csdn.net/Expert/topic/5129/5129164.xml?temp=.9395868
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoyPlusPlus 2006-11-04
  • 打赏
  • 举报
回复
3q
关键是控件是动态载入的。
看来得自己实现这部分了。
cat_hsfz 2006-11-04
  • 打赏
  • 举报
回复
你一定要动态加载,就写好在UserControl里面,因为ascx是可以写Bind的。之后你再用LoadControl动态加载ascx文件,就能达到你要的效果。
cat_hsfz 2006-11-03
  • 打赏
  • 举报
回复
如果你想知道写一句Bind之后ASP.NET编译器帮你生成了多少代码,你可以试着写一个用Bind的简单网页,编译,然后用Reflector看看生成的dll反编译回来的代码。
cat_hsfz 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()语法,不知怎么绑定。


顶....

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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