簡體   English   中英

OnSelectedIndexChanged事件不起作用

[英]OnSelectedIndexChanged event not working

我試圖觸發onSelectIndexChanged事件時將數據從存儲過程獲取到下拉列表中。 但是在設置斷點后,我知道生成的事件不起作用,即控件甚至沒有進入該代碼。

 <tr>
        <td><asp:Label ID="Label5" runat="server" Text="Book Category"></asp:Label></td>
        <td>
            <asp:DropDownList ID="ddlBookCategory" runat="server" Height="20px" Width="250px" OnSelectedIndexChanged="ddlBookCategory_SelectedIndexChanged"  >
            </asp:DropDownList>
        </td>
    </tr>
    <tr>
        <td><asp:Label ID="Label4" runat="server" Text="Book Subject"></asp:Label></td>
        <td>
            <asp:DropDownList ID="ddlBookSubject" runat="server" Height="20px" Width="250px" >
            </asp:DropDownList>
        </td>
    </tr>

后端cs文件編碼為:

 protected void Page_Load(object sender, EventArgs e)
{


     connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ToString();
     lblmsg.Visible = false;

     OleDbConnection con = new OleDbConnection(connectionString);
     OleDbCommand cmd = new OleDbCommand();

     try
     {
         con.Open();
         cmd.CommandType = System.Data.CommandType.StoredProcedure;

         cmd.CommandText = "ShowBookCategory";
         cmd.Connection = con;



         OleDbDataReader reader = cmd.ExecuteReader();


         if (reader.HasRows)
         {
             while (reader.Read())
             {
                 ddlBookCategory.Items.Add(new ListItem(reader["CategoryName"].ToString()));
             }
         }

     }
     catch (OleDbException ex)
     {
         ex.Data.ToString();
     } 
}


 protected void ddlBookCategory_SelectedIndexChanged(object sender, EventArgs e)
{
    ddlBookCategory.AutoPostBack = true;
    OleDbConnection con = new OleDbConnection(connectionString);
    OleDbCommand cmd2 = new OleDbCommand();
    MbERPLibraryBookSubjectProperty foc = new MbERPLibraryBookSubjectProperty();

    try
    {
        con.Open();
        cmd2.CommandType = System.Data.CommandType.StoredProcedure;
        cmd2.CommandText = "ShowBookSubjectWithCategory";
        cmd2.Connection = con;

        foc.CategoryName = ddlBookCategory.Text.ToString();
        cmd2.Parameters.Add(new OleDbParameter("@CategoryName", foc.CategoryName));
        cmd2.Parameters["@CategoryName"].Direction = System.Data.ParameterDirection.Input;

        OleDbDataReader reader2 = cmd2.ExecuteReader();
        if (reader2.HasRows)
        {
            while (reader2.Read())
            {
                ddlBookSubject.Items.Add(new ListItem(reader2["SubjectName"].ToString()));
            }
        }

    }
    catch (OleDbException ex)
    {
        ex.Data.ToString();
    } 
}

我的存儲過程是:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[ShowBookSubjectWithCategory](
    @CategoryName varchar(50)
    )
AS
BEGIN
select * from BookSubjects Where CategoryName = @CategoryName
END

如果要設置ddlBookCategory.AutoPostBack = true; 然后動態地在pageload事件中進行設置。

與其在事件處理程序中將autoPostBack聲明為true,不如在下面的DropDownList聲明中設置它:

<asp:DropDownList ID="ddlBookCategory" ... autopostback="true" ... >
...
</asp:DropDownList>

您需要將AutoPostBack = true添加到控件中,以使控件向服務器發信號通知已發生事件。 完成此操作后,您可以在代碼中為該控件上選定的索引更改事件設置事件處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM