Case 5 Dim btnB As New LinkButton btnB.Text = "修 改" AddHandler btnB.Click, AddressOf Me.edit_Clicked 请将这段代码放置 public override void OnInit(Object sender As Object,EventArgs e) 中执行。 如果是VB的代码,请楼主自己转换一下一定可以。
大致应该这样设计程序逻辑:property IsEdit as boolean property get if ViewState("edt") is nothing then return false else return ViewState("edt") end if end get property set(value as boolean) ViewState("edt")=value; end set end propertybool MySubControlsCreated as boolean=falsesub createMySubcontrols() '首先删除原有子控件 if isEdit then Dim btnC As New LinkButton AddHandler btnC.Click, AddressOf Me.Submit_Clicked Dim btnD As New LinkButton btnC.Text = "确 定" btnD.Text = "取 消" ...... else Dim btnB As New LinkButton btnB.Text = "修 改" AddHandler btnB.Click, AddressOf Me.edit_Clicked ...... end if MySubControlsCreated =true end subProtected Sub Page_Load(.....) Handles Me.Load if not MySubControlsCreated then call createMySubcontrols() end SubProtected Sub Page_PreRender(.....) Handles Me.PreRender if not MySubControlsCreated then call createMySubcontrols() end SubSub edit_Clicked(ByVal sender As Object, ByVal e As EventArgs) isEdit=true end sub
3楼你指的是 把Protected Sub Page_Load该成 OnInit ???
上面少了关键的一句: property set(value as boolean) ViewState("edt")=value MySubControlsCreated =false '在本次PreRender和下一次Load的时候起作用。 end set我不太记得vb.net了,如果有语法错误,自己修改吧。理解了思路就行了。
LinkButton?这不是回传是干什么? 按钮的事件应该是在页面初始化的时候生成的吧? sub createMySubcontrols() '首先删除原有子控件 if isEdit then Dim btnC As New LinkButton AddHandler btnC.Click, AddressOf Me.Submit_Clicked Dim btnD As New LinkButton btnC.Text = "确 定" btnD.Text = "取 消" 我想这样做是肯定不行的,因为你页面没有再次load,不能给他重新加载事件.如果load你就又回到原始事件...所以..换个方法来写吧第一次遇到这样的代码,不是很清楚.lz解决后把解决的方法贴出来已供参考
我大概明白了 sp1234(为什么有钱人总喜欢传教) 所说的意思,但我确实不太明白property IsEdit as booleanend property 这一段代码,只能一知半解去做了 这个办法我试了下是可行的,大致就是定义了一个ViewState("edt")来判断是否点击了编辑,首次页面打开时,我们定义它为ViewState("edt")为false, 然后在程序中呼叫 ...... Case 5 Call createMySubcontrols(i) ......下面定义 Sub createMySubcontrols(ByVal i As Integer) If ViewState("edt") Then Dim btnA As New LinkButton Dim btnC As New LinkButton btnA.Text = "确 定<br>" btnC.Text = "取 消" AddHandler btnA.Click, AddressOf Me.updata_Clicked Table1.Rows(i).Cells(10).Controls.Add(btnA) Table1.Rows(i).Cells(10).Controls.Add(btnC) Else Dim btnB As New LinkButton btnB.Text = "修 改" Table1.Rows(i).Cells(10).Controls.Add(btnB) AddHandler btnB.Click, AddressOf Me.test_Clicked End If End Sub 大家注意到上面,我传进去了一个i,它的主要用途是根据目前的循环取得记录的行位置,好确定我们动态产生的按钮是插进那一行去的,但这却产生了一个问题。以后再讲/首先,因为首次ViewState("edt")是false,所以它会执行"修改"按钮这一段代码,然后我们在"修改"按钮对应的test_Clicked事件 里把ViewState("edt")=true ,那么当表单按钮(这里的"修改"按钮)被提交的时候,会重新发生page_laod事件,-------------其实我并不太肯定当表单按钮(这里的"修改"按钮)被提交的时候,会不会再重新发生page_laod事件,所以问题也就出来了。---------------假设它促使page_laod发生,然后页面再次执行到createMySubcontrols(i)这个函数时,这次因为是true,会执行产生“确定”和“取消”的代码。现在按照这种办法,必须点两次修改才会变成“确定”和“取消” 按钮,同时,“确定”按钮也必须按两次才能回到修改。为什么呢同时,还有上面所说的i的问题,因为i是从0开始,而我们的表格虽然第一行是0,但它通常用来做标题了,所以真正的数据显示是从第1行开始的,所以要用一个i+1来显示正确的按钮应该产生的位置。这在没有用这个方法之前i+1是完全正确的,但在这里,会出现一个超出index范围的错误,但如果我们用i,当i=0时,就会把按钮出现在标题的位置。真不明白是为什么!
btnB.Text = "修 改"
AddHandler btnB.Click, AddressOf Me.edit_Clicked
请将这段代码放置
public override void OnInit(Object sender As Object,EventArgs e)
中执行。
如果是VB的代码,请楼主自己转换一下一定可以。
property get
if ViewState("edt") is nothing then
return false
else
return ViewState("edt")
end if
end get
property set(value as boolean)
ViewState("edt")=value;
end set
end propertybool MySubControlsCreated as boolean=falsesub createMySubcontrols()
'首先删除原有子控件
if isEdit then
Dim btnC As New LinkButton
AddHandler btnC.Click, AddressOf Me.Submit_Clicked
Dim btnD As New LinkButton
btnC.Text = "确 定"
btnD.Text = "取 消"
......
else
Dim btnB As New LinkButton
btnB.Text = "修 改"
AddHandler btnB.Click, AddressOf Me.edit_Clicked
......
end if
MySubControlsCreated =true
end subProtected Sub Page_Load(.....) Handles Me.Load
if not MySubControlsCreated then call createMySubcontrols()
end SubProtected Sub Page_PreRender(.....) Handles Me.PreRender
if not MySubControlsCreated then call createMySubcontrols()
end SubSub edit_Clicked(ByVal sender As Object, ByVal e As EventArgs)
isEdit=true
end sub
ViewState("edt")=value
MySubControlsCreated =false '在本次PreRender和下一次Load的时候起作用。
end set我不太记得vb.net了,如果有语法错误,自己修改吧。理解了思路就行了。
按钮的事件应该是在页面初始化的时候生成的吧?
sub createMySubcontrols()
'首先删除原有子控件
if isEdit then
Dim btnC As New LinkButton
AddHandler btnC.Click, AddressOf Me.Submit_Clicked
Dim btnD As New LinkButton
btnC.Text = "确 定"
btnD.Text = "取 消"
我想这样做是肯定不行的,因为你页面没有再次load,不能给他重新加载事件.如果load你就又回到原始事件...所以..换个方法来写吧第一次遇到这样的代码,不是很清楚.lz解决后把解决的方法贴出来已供参考
这个办法我试了下是可行的,大致就是定义了一个ViewState("edt")来判断是否点击了编辑,首次页面打开时,我们定义它为ViewState("edt")为false, 然后在程序中呼叫
......
Case 5
Call createMySubcontrols(i)
......下面定义 Sub createMySubcontrols(ByVal i As Integer)
If ViewState("edt") Then
Dim btnA As New LinkButton
Dim btnC As New LinkButton
btnA.Text = "确 定<br>"
btnC.Text = "取 消"
AddHandler btnA.Click, AddressOf Me.updata_Clicked Table1.Rows(i).Cells(10).Controls.Add(btnA)
Table1.Rows(i).Cells(10).Controls.Add(btnC)
Else
Dim btnB As New LinkButton
btnB.Text = "修 改"
Table1.Rows(i).Cells(10).Controls.Add(btnB)
AddHandler btnB.Click, AddressOf Me.test_Clicked
End If
End Sub
大家注意到上面,我传进去了一个i,它的主要用途是根据目前的循环取得记录的行位置,好确定我们动态产生的按钮是插进那一行去的,但这却产生了一个问题。以后再讲/首先,因为首次ViewState("edt")是false,所以它会执行"修改"按钮这一段代码,然后我们在"修改"按钮对应的test_Clicked事件
里把ViewState("edt")=true ,那么当表单按钮(这里的"修改"按钮)被提交的时候,会重新发生page_laod事件,-------------其实我并不太肯定当表单按钮(这里的"修改"按钮)被提交的时候,会不会再重新发生page_laod事件,所以问题也就出来了。---------------假设它促使page_laod发生,然后页面再次执行到createMySubcontrols(i)这个函数时,这次因为是true,会执行产生“确定”和“取消”的代码。现在按照这种办法,必须点两次修改才会变成“确定”和“取消” 按钮,同时,“确定”按钮也必须按两次才能回到修改。为什么呢同时,还有上面所说的i的问题,因为i是从0开始,而我们的表格虽然第一行是0,但它通常用来做标题了,所以真正的数据显示是从第1行开始的,所以要用一个i+1来显示正确的按钮应该产生的位置。这在没有用这个方法之前i+1是完全正确的,但在这里,会出现一个超出index范围的错误,但如果我们用i,当i=0时,就会把按钮出现在标题的位置。真不明白是为什么!