簡體   English   中英

我試圖從我的SQL語句的下拉菜單中使用selectedItem來填充C#asp.net中的文本框

[英]I am trying to use a selectedItem from a drop down menu in my SQL statement to populate a textbox in C# asp.net

到目前為止,一切都沒有錯誤地加載,一旦一切正常,SQL調用將被更安全的存儲過程替換。 當我從下拉菜單中選擇一個爐子時,它應該傳遞給方法並用運行編號填充文本框。 但是當我選擇任何東西時,它只會回到第一個指數10A。 我還編寫了索引0應該說“Select Furnace”,但也沒有顯示,只有第一個索引。 是否有關於如何獲取所選索引並從SQL查詢填充文本框的建議?

 <asp:Content ID="BodyContent" ContentPlaceHolderID="BodyPlaceHolder" runat="server">
  <center>
   <table style="text-align:left">
    <tr>
     <td align="right">
            <asp:Label ID="FurnaceID" Text="JUMP TO FURNACE : " runat="server" />
        </td>
        <td></td>
        <td>
    <asp:DropDownList ID="FurnID" runat="server" AutoPostBack ="true"
        onselectedindexchanged="FurnID_SelectedIndexChanged" Width="150px">
        <asp:ListItem Text="Select Furnace" Value = "0" />
    </asp:DropDownList>

守則背后:

LoadList(); 在page_load事件中調用

   public void LoadList()
    {

            SqlCommand cmd = new SqlCommand("SELECT * FROM [Furnace]", new SqlConnection(ConfigurationManager.ConnectionStrings["FurnaceDeckConnectionString"].ConnectionString));
            cmd.Connection.Open();

            SqlDataReader Furns;
            Furns = cmd.ExecuteReader();


            FurnID.DataSource = Furns;

            FurnID.DataValueField = "Furnaceno";
            FurnID.DataTextField = "Furnaceno";
            FurnID.DataBind();

            cmd.Connection.Close();
            cmd.Connection.Dispose();

    }

更改索引時,將調用此方法:

protected void FurnID_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            String selectedFurn = "";
            ListItem selectFurn = FurnID.Items.FindByText(selectedFurn);
            LoadFurnDetails(selectedFurn);
        }

    }

    public void LoadFurnDetails(String F)
    {
        String selectF = F;
        DataTable dt = new DataTable();
        SqlCommand cmd = new SqlCommand("SELECT * FROM [Furnace Run Data Table] Where Furnace = 'selectF' and Completed = 0 ", new SqlConnection(ConfigurationManager.ConnectionStrings["FurnaceDeckConnectionString"].ConnectionString));
        cmd.Connection.Open();
        SqlDataAdapter sqlDa = new SqlDataAdapter(cmd);
        sqlDa.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            lblFurnId.Text = dt.Rows[0]["runno"].ToString();


        }

        cmd.Connection.Close();
        cmd.Connection.Dispose(); 

    }

這部分

    if (IsPostBack)
    {
        String selectedFurn = "";
        ListItem selectFurn = FurnID.Items.FindByText(selectedFurn);
        LoadFurnDetails(selectedFurn);
    }

...將字符串“selectedFurn”定義為空字符串。 然后,您嘗試使用此空字符串按文本查找項目。 我假設,這個項目不存在......無論如何,你不使用找到的ListItem,但只是傳遞空字符串...

您最有興趣對當前所選項目和此特殊項目的加載詳細信息感興趣,不是嗎? 嘗試使用.Selecteditem查找ListItem ,而不是在LoadFurnDetails空字符串作為參數LoadFurnDetails ...

下一個問題是:

SqlCommand cmd = new SqlCommand("SELECT * FROM [Furnace Run Data Table] Where Furnace = 'selectF' and Completed = 0 " ...

您認為傳入變量“selectF”但實際上正在搜索硬編碼的“selectF”...您必須將“selectF”替換為變量的實際內容。

再一個不走的:你應該總是使用參數, 將字符串命令!

@Schnugo,你提供了線索,如果其他人遇到同樣的問題,這里有一些代碼幫助。 這解決了我。

         if (IsPostBack)
        {

            String selectFurn = FurnID.SelectedItem.Text.ToString();
            SqlConnection m_sqlConnection;
            string m_connectionString = ConfigurationManager.ConnectionStrings["FurnaceDeckConnectionString"].ConnectionString;
            using (m_sqlConnection = new SqlConnection(m_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand("Load_Furn"))
                {
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {

                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@selectFurn",  selectFurn);
                        cmd.Connection = m_sqlConnection;
                        m_sqlConnection.Open();
                        SqlDataReader dr = cmd.ExecuteReader();
                        if (dr.HasRows)

datareader讀取數據,並與while語句一起使用以讀取行。 您必須使用SqlDataAdapter來填充可用作下拉菜單的數據源的dataset 默認值也應該添加到該數據集,否則在您注意到設置數據源后將不會顯示它。

將數據加載到表中,然后使用表作為數據。

試試這個:

public void LoadList()
{
    var table = new System.Data.DataTable("Furnaceno");
    using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FurnaceDeckConnectionString"].ConnectionString))
    {
        conn.Open();
        using (var cmd = new SqlCommand("SELECT * FROM [Furnace]", conn))
        {
            table.Load(cmd.ExecuteReader());
        }
    }
    FurnID.DataSource = table.DefaultView;
    FurnID.DataValueField = "Furnaceno";
    FurnID.DataTextField = "Furnaceno";
    FurnID.DataBind();
}

暫無
暫無

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

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