在datagrid中,通过findcontrol引用的控件能否设置控件属性?

ntzd_zjh 2006-09-26 02:39:57
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not IsPostBack Then
strconn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data-lilun.mdb")
ada = New OleDbDataAdapter("SELECT 题号,题目,A,B,C,D,答案 FROM tiku where 卷号='" & ListBox1.SelectedValue & "'", strconn)
ada.Fill(ds)
DataGrid1.DataSource = ds.Tables(0)
DataGrid1.DataBind()

End If
End Sub

Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
strconn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data-lilun.mdb")
ada = New OleDbDataAdapter("SELECT 题号,题目,A,B,C,D,答案 FROM tiku where 卷号='" & ListBox1.SelectedValue & "'", strconn)
ada.Fill(ds)
DataGrid1.DataSource = ds.Tables(0)
DataGrid1.DataBind()
End Sub
Private Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Unload
ada.Dispose()
ds.Dispose()

End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand
DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex
strconn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data-lilun.mdb")
ada = New OleDbDataAdapter("SELECT 题号,题目,A,B,C,D,答案 FROM tiku where 卷号='" & ListBox1.SelectedValue & "'", strconn)
ada.Fill(ds)
DataGrid1.DataSource = ds.Tables(0)
DataGrid1.DataBind()
If e.CommandName = "show" Then
CType(e.Item.FindControl("Tx"), TextBox).Visible = False
Response.Write(CType(e.Item.FindControl("Tx"), TextBox).Text)
End If

End Sub

在itemcommand中response能输出控件的text,当不能设置其属性,那位能给我看看,谢谢了?
...全文
136 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ntzd_zjh 2006-09-28
帮忙啊
  • 打赏
  • 举报
回复
ntzd_zjh 2006-09-27
Response.Write(CType(e.Item.FindControl("Tx"), TextBox).Text)只是用来实验能不能取的textbox的属性值,我的目的是通过按纽控制文本框的显示与否,每一行的都分别通过不同的按纽控制,在网页回发之后,要保持其状态,我现在怎么弄都只能控制一行的显示,但把一行的文本框隐藏后,再点击按纽隐藏其他的,那刚刚隐藏的就又显示出来了.高人帮着出出主意
  • 打赏
  • 举报
回复
有好几个问题,以及改进的地方:

首先,你没一个事件里边都首先重建DataGrid1。但是如果发生两个、三个甚至更多的相关事件呢?难道无数次重建DataGrid1?而且第一次重建DataGrid1尚且可以获得文本框上客户端的更新值,当第二次重建DataGrid1的时候asp.net就不会给你填入post上来的客户端的值了,此时你就“丢了”客户端提交的值。

第二,由于page_load中有“If Not IsPostBack”判断,这就意味着DataGrid1不会在回发时重建,那么其中如果有某些链接的click事件、某些Textbox的changed事件、模板列中的大部分事件等等,只要不是发生在DataGrid1上边的事件你都无法捕获到。


通常应该这样写:

首先在page_load中不对IsPostBack进行判断。只要是需要获得客户端post的值,和事件,你就不能判断IspostBack,反而应该重建其结构,给asp.net产生一个可以帮你随后放入各种值、事件的地方来。当然这样各个事件的开头也就不需要再次重建DataGrid。

然后,如果你要更新DataGrid1的内容,要根据e.item中的某列信息(例如使用隐藏列来保存数据库记录的主键)然后到DataGrid.Items中去找到对应的item去修改。由于DataGrid1重新绑定的,它不一定与e.item在同一个行号。

或者,你应该从e.item中获得信息直接修改数据源(例如数据库资料)。然后你可以重新绑定DataGrid1(但是这会丢失其它post上来的值),也可以不绑定。当不绑定时,就意味着DataGrid1中总是post上来的值,而你响应客户端触发的服务器事件的结果总是更新到数据源。此时你可以给页面的一个private的变量设置一个值,标记DataGrid1“需要在输出之前重新绑定”。

如果你不绑定而仅仅设置逻辑值,那么应该在OnPreRender事件中判断这个值并且重新从数据源绑定DataGrid1。此时,你在题目中要达到的“控制输出控件”的属性操作是在这个时候设置,在ItemDataBound事件中设置。
  • 打赏
  • 举报
回复
在你的DataGrid1_ItemCommand方法中,你重建了DataGrid1的每一行(因为你有DataBind()),那么你对那个仅仅说明上一个页面的一行的e.item中的控件再怎么操作,又有什么用呢?它又不在新的DataGrid1中。
  • 打赏
  • 举报
回复
Q:
Response.Write(CType(e.Item.FindControl("Tx"), TextBox).Text)
End If

End Sub

在itemcommand中response能输出控件的text,当不能设置其属性,那位能给我看看,谢谢了?
——————————————————————————————————————————
A: 你写的也太简单了,连要设置什么属性都不写。再说,你Response.Write它的属性,难道Write方法还能用于设置某个控件的属性?

你确信这样不行?
Response.Write(CType(e.Item.FindControl("Tx"), TextBox).MaxLength)
  • 打赏
  • 举报
回复
pol000 2006-09-26
帮顶~
可以的~
  • 打赏
  • 举报
回复
ntzd_zjh 2006-09-26
textbox 和 commandbutton两个模版列中,点击按纽提交网页后好象不能保持控件的状态,在文本框中输入的文本,在提交后,就自动清空了.也不能设置其属性.
  • 打赏
  • 举报
回复
myminimouse 2006-09-26
直接用row.cell.control不就可以了吗?
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-09-26 02:39
社区公告
暂无公告