1

好吧,看起来一个基本的问题是让我变得更好,而我在谷歌上的广泛努力却失败了。也许我不够了解,无法提出正确的问题。

这是我的问题:

我有一个表单视图控件,或者更确切地说是其中的一系列控件,每个页面都显示以前表单的条目,以便根据需要进行更高级别的批准/编辑。所以,在表格“B”上,我要填写表格“A”的内容和“B”的空白部分......所以页面上有两个单独的视图......“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>

'''这是所要求的 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 回答