1

わかりました。基本的な問題のように思えるのは、私をより良くすることであり、Google での多大な努力が不足しています。適切な質問をするのに十分な理解が得られていないのかもしれません。

これが私の問題です:

必要に応じて承認/編集するためのより高いレベルのアクセスのために、各ページに以前のフォームからのエントリを表示するフォームビュー コントロール、または一連のコントロールがあります。したがって、フォーム「B」では、フォーム「A」のコンテンツと「B」の空白部分に記入する必要があります...したがって、ページ上の2つの別々のビュー..「A」と「B」

問題は、モードを変更して前のエントリを編集するときです。そのため、ReadOnly から Edit に変更するボタンまたはデフォルトのリンクボタンがある場合、バインドが失われるだけでなく、ポストバック時に問題が発生したことを打ち消すためのあらゆる努力が失われます。

長さのため、一部のコードを省略しています

私のボタンでは、 FormView2.ChangeMode(FormViewMode.Edit) を使用してビューを変更していますが、デフォルトのリンクボタンは変更していません

リストボックスのバインディングは次のように設定されています。

If Not Page.IsPostBack Then
    'pulling bindings from table
    cmd = New OleDbCommand("SELECT * FROM mslToi", objCon)
    objReader = cmd.ExecuteReader
    lst1.DataValueField = "listing"
    lst1.DataTextField = "listing"
    lst1.DataSource = objReader
    lst1.DataBind()

    'pre-selecting input data from form "A"
    cmd = New OleDbCommand("SELECT [type_of_injury] FROM S2childToi WHERE ID = " & qs & "", objCon)
    objReader = cmd.ExecuteReader
        Do While objReader.Read

            For Each y As ListItem In lst1.Items
                If y.Text = objReader.Item(0) Then
                    y.Selected = True
                End If
            Next
        Loop

end if

ページ読み込みイベントで。

要求された FORMVIEW のマークアップ

<asp:FormView ID="FormView2" runat="server" 
    Width="100%" DataSourceID="AccessDataSource4">

<ItemTemplate>
</ItemTemplate>

<EditItemTemplate>
</EditItemTemplate>

</asp:FormView>

'''これは、要求どおりのフォームビュー マークアップの短くて甘いものです。また、どのモードで開始しても、モードを変更しても同じ結果になることに注意してください」

これまでのところ問題なく動作しています... ビューを編集に変更すると、リストボックスがバインドされていないように見えます (コントロールは表示されますが、コンテンツはありません)。私の考えでは、明らかにポストバック イベントからコードをブロックしていると思います (これには理由があります)。このコードを (If Not Page.IsPostBack なしで) 使用して選択とバインディングを強制することができますが、ポストバックするたびにテーブル データにデフォルト設定されますが、これは起こり得ません。選択。したがって、ユーザー入力が切り捨てられます。短くて甘い。

うまく説明できなくて申し訳ありませんが、アドバイスをいただければ幸いです。ご不明な点がございましたら、または郵便番号をお知らせください。

4

1 に答える 1

1

これを試して:

<asp:FormView ID="FormView1" runat="server">
    <ItemTemplate>
        <asp:ListBox ID="ListBoxReadonly" runat="server"></asp:ListBox>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:ListBox ID="ListBoxEdit" runat="server"></asp:ListBox>
    </EditItemTemplate>
</asp:FormView>

次に、FormView のデータバインド イベントで、現在のビューに応じてデータをリスト ボックスにバインドします。

Protected Sub FormView1_DataBound(sender As Object, e As EventArgs) Handles FormView1.DataBound
    Dim myListBox As ListBox

    If FormView1.CurrentMode = FormViewMode.ReadOnly Then
        myListBox = DirectCast(FormView1.FindControl("ListBoxReadonly"), ListBox)
    ElseIf FormView1.CurrentMode = FormViewMode.Edit Then
        myListBox = DirectCast(FormView1.FindControl("ListBoxEdit"), ListBox)
    End If

    If myListBox IsNot Nothing Then
        myListBox.DataValueField = "listing"
        myListBox.DataTextField = "listing"
        myListBox.DataSource = GetListingData()
        myListBox.DataBind()

        ' your pre-select code here...
    End If
End Sub
于 2012-10-10T16:37:06.357 に答える