私はテレリックの ajax コントロールを試してきましたが、これまでのところ、大きな問題は発生していません。私は編集機能を備えた ajax radgrid を使用しています。彼らの提案の 1 つは、特定のグリッド レコードを編集するために、プログラムでコントロールを埋め込んだ Web フォーム ユーザー コントロール (.ascx) を使用することです。
Web フォームを問題なく開くことができ、コード ビハインドに次のコントロールを入力することもできます。
- テキストボックス
- ラベル
- ドロップダウンリスト
グリッドについては、編集機能をテストしてきました。レコードを編集するには、適切に編集するために 3 つのドロップダウンリストが必要です。ここから問題が始まります。
コントロールの追加の間にブレークポイントを置き、次の手順を実行すると、特定のメタデータ条件に一致する場合にレコードを追加する関数があります。
- コントロールの最初の「行」を追加します (ラベルとテキストボックス)
コントロールの 2 番目の「行」を追加します (ラベルとドロップダウンリスト)
ここで停止して関数を終了するためにステップインすると、次のことが起こります。両方のラベルには正しいテキストとテキストボックスがありますが、選択したインデックスの値を「2」に設定し、クイックウォッチでそれを設定しても、ドロップダウンリストはそれほど多くありません2 のままで、Web フォームが表示されるとデフォルト値が「0」にリセットされます
コントロールの 3 番目の「行」を追加します (ラベルとドロップダウンリスト)
ここで停止して関数の最後に進むと、クイックウォッチではすべて問題ありませんが、Web フォームが表示/ロードされると、両方のドロップダウン リストの内部に同じ値が含まれ、両方とも selectedindex = 0 になります。
編集:私が期待している動作について説明します:
- たとえば、「なし、A、B、C、D、E、F、G」で埋められ、選択された項目として「A」を持つ最初のドロップダウン(1)
- たとえば、「None、F1、F2、F3、F4、F5、F6」で満たされ、選択されたアイテムとして「F3」を持つ2番目のドロップダウン(2)
これは私が得ている動作です:
Web フォームがロードされると、ドロップダウン (1) とドロップダウン (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)