[英]How can I add a straight line on my chart on the basis of user input from drop down menu in asp.net c#
[英]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.