我一直在尝试 Telik 的 ajax 控件,到目前为止它们还没有给我带来很大的问题。我正在使用具有编辑功能的 ajax radgrid,他们的建议之一是使用以编程方式填充控件的 Web 表单用户控件 (.ascx) 来编辑特定的网格记录。
我可以很好地打开 Web 表单,并使用以下控件在代码隐藏中填写它:
- 文本框
- 标签
- 下拉列表
对于我一直在测试编辑功能的网格,要编辑一条记录,我需要 3 个下拉列表才能正确编辑它,现在这就是我的问题开始的地方。
如果我在添加控件之间放置断点并执行以下步骤,我有一个添加记录的函数,如果它们符合某些元数据标准:
- 添加控件的第一“行”(标签和文本框)
添加控件的第二“行”(标签和下拉列表)
如果我停在这里并步入结束函数,则会发生以下情况,两个标签都具有正确的文本以及文本框,但下拉列表没有那么多,即使我已将所选索引设置为“2”并在快速观看中停留在 2,一旦显示 web 表单,默认值值重置为“0”
添加控件的第三“行”(标签和下拉列表)
如果我在这里停下来并进入函数的末尾,即使在 quickwatch 中一切都很好,一旦显示/加载 Web 表单,两个下拉列表将在其中具有相同的值,并且它们的 selectedindex = 0
编辑:我将描述我期望的行为:
- 第一个下拉列表(1)要填充例如“None,A,B,C,D,E,F,G”,并以“A”作为选定项
- 第二个下拉列表(2)要填充例如“None,F1,F2,F3,F4,F5,F6”,并将“F3”作为选定项
这是我得到的行为:
加载 Web 表单后,dropdown(1) 和 dropdown(2)将填充“None,F1,F2,F3,F4,F5,F6”,并且它们的选择值为“None”,即使它设置为其他值
我错过了一些特殊的 ascx 相关事件吗?
这是我的一些代码:
详细信息.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="Details.ascx.vb" Inherits="Project.Details" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<div id="template_edit" style="background-color:red" runat="server">
<%-- div onto which all my controls are addded --%>
</div>
<div id="editfooter">
<asp:Button ID="Button_aceitar" Text="Update" runat="server" CommandName="Update" Visible="true"></asp:Button>
<asp:Button ID="Button2" Text="Insert" runat="server" CommandName="PerformInsert" Visible="true"></asp:Button>
<asp:Button ID="Button_cancelar" Text="Cancelar" runat="server" CausesValidation="False" CommandName="Cancel"></asp:Button>
<asp:Label ID="LabelLOG" runat="server" Text="Label" Visible="False"></asp:Label>
</div>
details.ascx.vb 上的一些代码
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Try
sOper = Session("OPERACAO_Edit")
gPeriodo = Session("PERIODO_Edit")
gClasse = Session("CLASSE_Edit")
gSistema = Session("SISTEMA_Edit")
Catch ex As Exception
End Try
gEG = Session("EntidGest")
Select Case gClasse & gSistema
Case 11
gMNID = 1
Case 12
gMNID = 2
Case 21
gMNID = 3
Case 22
gMNID = 4
Case 31
gMNID = 5
Case 32
gMNID = 6
End Select
Add_Controls(sOper)
Else
gPeriodo = Request.QueryString("periodo")
gClasse = Request.QueryString("classe")
gSistema = Request.QueryString("sistema")
gEG = Session("EntidGest")
Select Case gClasse & gSistema
Case 11
gMNID = 1
Case 12
gMNID = 2
Case 21
gMNID = 3
Case 22
gMNID = 4
Case 31
gMNID = 5
Case 32
gMNID = 6
End Select
End If
Catch ex As Exception
End Try
End Sub
Private Sub Detail_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Try
gVALIDATETEXT = "a-záâàãéêèíîìóôòõúûùçA-ZÁÂÀÃÉÊÈÍÎÌÓÔÒÕÚÛÙÇ .,;:/+\?!0-9<>_=&-"
gVALIDATETEXT = gVALIDATETEXT.Replace("a-z", "")
gVALIDATETEXT = gVALIDATETEXT.Replace("A-Z", "")
gVALIDATETEXT = gVALIDATETEXT.Replace("0-9", "")
Catch ex As Exception
gText = System.Reflection.MethodBase.GetCurrentMethod().Name & " Erro: " & Me.Page.ToString & " " & ex.Message
Add2LogFile(glogpath, gText)
End Try
End Sub
Private Sub Add_Controls(ByVal bOper As String)
'this bit of code is inside a loop that goes through some metadata, creates and adds controls to a div
Dim oCmb As New DropDownList
Dim oTextBox As New TextBox
Dim gSqlCMB As New SqlDataSource
Dim sValue as String
oCmb = New DropDownList
oCmb.ID = 'something dynamic
gSQL = "select c,t from table" 'the query is different for each dropdownlist
gSqlCMB.SelectCommand = gSQL
oCmb.DataSource = gSqlCMB
oCmb.DataValueField = "C"
oCmb.DataTextField = "T"
oCmb.SelectedValue = sValue '"1", "2", "3"....
oCmb.DataBind()
template_edit.controls.Add(oCmb)