1

我有一个带有 1 个 DataGrid 的 Windows 窗体,其中一个列中有一个 Dropdownlist。

我在这个 DataGrid 之外还有另一个 dropDownlist。

这两个下拉列表都绑定到相同的数据集,并且都填充了相同的项目。

两个 DropDown 的 Autopostbacks 都设置为 true。

问题仅针对 Datagrid SelectedIndexChange 事件之外的下拉列表被触发:

(我在 SO 上看到了多个类似的问题,但没有一个建议对我有用。所以如果你能在这里帮助我,我真的很感激。

)

Protected Sub ABCD(ByVal sender As System.Object, ByVal e As System.EventArgs)    


End Sub

对于两个下拉列表: AutoPostBack="True"

这是VB代码:

Imports System.Data.OleDb
Public Class WebForm1
    Inherits System.Web.UI.Page


    Protected WithEvents dg As New System.Web.UI.WebControls.DataGrid
    Private cnDB As New OleDbConnection
    Private ds As New DataSet
    Private daDB As New OleDbDataAdapter
    Protected allNames As New DataSet
    Protected MyDataSet As DataSet
    Protected WithEvents DropDownList1 As System.Web.UI.WebControls.DropDownList
    Protected WithEvents DropDownList2 As System.Web.UI.WebControls.DropDownList
    Protected WithEvents ddlName As New System.Web.UI.WebControls.DropDownList

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    'NOTE: The following placeholder declaration is required by the Web Form Designer.
    'Do not delete or move it.
    Private designerPlaceholderDeclaration As System.Object

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



        MyDataSet = NameBudget()

        GridDataLoad()



    End Sub

    Protected Sub Grid_EditCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs)

        dg.EditItemIndex = e.Item.ItemIndex

        dg.DataSource = ds
        dg.DataBind()

    End Sub
    Protected Sub Grid_CancelCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs)

        dg.DataSource = ds.Tables(0).DefaultView
        dg.EditItemIndex = -1
        dg.DataSource = ds
        dg.DataBind()

    End Sub

    Protected Sub Grid_UpdateCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs)


    End Sub


    Private Function GridDataLoad()


        ddlName.DataSource = MyDataSet


        Dim i As Object = MyDataSet.Tables(0)
        ddlName.DataBind()


        DropDownList1.DataSource = MyDataSet
        DropDownList1.DataBind()

        Dim strCon As String = _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\AccessTestDataBases\TestDB.mdb; "
        Dim cnDB As New OleDbConnection(strCon)
        cnDB.Open()
        daDB = New OleDbDataAdapter("Select * from [Persons]", cnDB)

        daDB.Fill(ds, "tbl1")




        Dim j As Object = ds.Tables(0)

        dg.DataSource = ds
        dg.DataBind()


        cnDB.Close()

        Dim ii As Object = ds.Tables(0)





    End Function


    Protected Function NameEditable(ByVal n As String) As Boolean
        Return True
    End Function

    Protected Function NameBudget() As DataSet

        Dim strCon As String = _
               "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\AccessTestDataBases\TestDB.mdb; "
        Dim cnDB As New OleDbConnection(strCon)
        cnDB.Open()
        daDB = New OleDbDataAdapter("Select ID,Name from [Persons]", cnDB)

        Dim ds As New DataSet

        daDB.Fill(ds, "tbl1")
        cnDB.Close()


        Return ds


    End Function


    Sub SetDefaultListItem(ByVal sender As Object, ByVal e As System.EventArgs)
        '*************************************************************************
        '* Use this sub to set the Default List for DropDown Listboxes           *
        '*************************************************************************
        Try
            If Len(sender.DefaultValue) > 0 Then
                If sender.Items.FindByValue(sender.DefaultValue).ToString.Length > 0 Then
                    sender.Items.FindByValue(sender.DefaultValue).Selected = True
                End If
            End If
        Catch ex As System.Exception
            'Throw New System.Exception(ex.ToString())
        End Try

    End Sub



    Protected Sub ABCD(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

End Class

这是数据网格和下拉列表的 HTML:

<Columns>

   <ASP:ButtonColumn Text="Delete" CommandName="Delete"></ASP:ButtonColumn>

   <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel"
  EditText="Edit"></asp:EditCommandColumn>

  <ASP:TemplateColumn HeaderText="Name" SortExpression="FY" HeaderStyle-HorizontalAlign="center" HeaderStyle-Wrap="True">

  <ItemStyle Wrap="false" HorizontalAlign="left" />
  <ItemTemplate>
    <ASP:Label ID="Name" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' runat="server"/>
</ItemTemplate>
<EditItemTemplate>
  <ASP:DropDownList id="DropDownlist2" datasource="<%# MyDataSet %>" DataTextField= "Name" DataValueField="ID" runat="server" AutoPostBack="True"  OnSelectedIndexChanged="ABCD">
  </ASP:DropDownList>
</EditItemTemplate>

</ASP:TemplateColumn>

</Columns>


<asp:DropDownList id="DropDownList1" 
    datasource="<%# MyDataSet %>" DataTextField= "Name" 
         DataValueField="ID" runat="server" AutoPostBack="True"
    OnSelectedIndexChanged="ABCD">
</asp:DropDownList>
4

0 回答 0