2017-04-12 19 views
1

ジョブをアーカイブするために使用される小さなWebフォームがあります。ユーザーはジョブ番号をテキストボックスに入力し、ジョブを入札している顧客をドロップダウンで埋めなければなりません。また、ユーザーは、ジョブが勝ったか紛失したか、重複したジョブかを選択します。その後、フォームが送信され、SQLデータベースが更新されます。私は見つけることができませんし、テキストボックスに基づいてドロップダウンリストを設定する例。私が見つけたすべての例は、ドロップダウンに基づいてテキストボックスに値を設定しています。C#を使用してaspテキストボックスのテキストに基づいて、SQLデータベースのデータをaspドロップダウンリストに入力するにはどうすればよいですか?

<div class="container"> 
    <h2>Job Archive Form</h2> 
     <div class="form-group"> 
      <asp:Label ID="lblJobNumber" runat="server">Job Number</asp:Label><br /> 
      <asp:TextBox ID="archiveJobNumber" runat="server" AutoPostBack="True" OnTextChanged="archiveJobNumber_TextChanged"/> 
     </div> 
     <div class="form-group"> 
      <asp:Label ID="lblJobStatus" runat="server">Job Status</asp:Label><br /> 
      <asp:DropDownList ID="archiveJobStatus" runat="server"> 
       <asp:ListItem value="">--Select--</asp:ListItem> 
       <asp:ListItem value="1">Active</asp:ListItem> 
       <asp:ListItem value="2">Won</asp:ListItem> 
       <asp:ListItem value="3">Lose</asp:ListItem> 
       <asp:ListItem value="4">Duplicate</asp:ListItem> 
      </asp:DropDownList> 
     </div> 
     <div class="form-group"> 
      <asp:Label ID="lblCustomer" runat="server">Customer</asp:Label><br /> 
      <asp:DropDownList ID="archiveCustomer" runat="server" DataSourceID="archiveSqlDSCustomer" DataTextField="Name" DataValueField="CustID" AutoPostBack="True"></asp:DropDownList> 
     </div>               
     <asp:Button ID="submit" runat="server" Text="Submit" OnClick="submit_Click"></asp:Button> 
</div> 

背後にあるコード:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Configuration; 
using System.Web.Security; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Data.SqlClient; 

namespace JobsApp 
{ 
    public partial class Archive : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Session["UID"] == null) 
       Response.Redirect(@"Account\Login.aspx"); 
     } 

     protected void submit_Click(object sender, EventArgs e) 
     { 
      string constring = ""; 
      constring = ConfigurationManager.ConnectionStrings["JobsConstr"].ToString(); 
      SqlConnection con = new SqlConnection(constring); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("usp_changeJobStanding", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      SqlParameter jobNumber = cmd.Parameters.Add("@jobNumber", SqlDbType.VarChar); 
      SqlParameter jobStanding = cmd.Parameters.Add("@jobStanding", SqlDbType.Int); 
      jobNumber.Value = archiveJobNumber.Text; 
      jobStanding.Value = archiveJobStatus.Text; 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      Response.Redirect("~/Archive.aspx"); 
     } 

     protected void archiveJobNumber_TextChanged(object sender, EventArgs e) 
     { 
      archiveSqlDSCustomer.SelectCommand = "GetCustomerListByJobNumber"; 
      archiveCustomer.DataSourceID = "archiveSqlDSCustomer"; 
     } 
    } 
} 
+0

テキストボックスの値に基づいてデータを取得しているようですが、ドロップダウンアイテムを作成する方法やデータをドロップダウンコントロールにバインドする方法がわかりません。 – Seano666

+0

@ jaz1976 archiveSqlDSCustomerのコードを表示できますか? – Win

+0

私はドロップダウンを構築する方法やデータをバインドする方法がわかりません。 ASP.Netは私には新しく、通常はノードで作業します。私は残したプログラマーからこれを継承しました。 – jaz1976

答えて

0

あなたはarchiveJobNumber_TextChangedイベント内のデータベースからデータを取得し、DropDownListにデータをバインドすることができます。例えば

<asp:TextBox ID="archiveJobNumber" runat="server" AutoPostBack="True" 
    OnTextChanged="archiveJobNumber_TextChanged" /> 

<asp:DropDownList ID="archiveCustomer" runat="server" 
    DataTextField="Name" DataValueField="CustID" AutoPostBack="True"> 
</asp:DropDownList> 


protected void archiveJobNumber_TextChanged(object sender, EventArgs e) 
{ 
    var query = "SELECT CustID, Name FROM Users WHERE CustID= @Id"; 
    using (var con = new SqlConnection(connectionString)) 
    using (var da = new SqlDataAdapter(query, con)) 
    { 
     con.Open(); 
     var dt = new DataTable(); 
     da.SelectCommand.Parameters.AddWithValue("@Id", archiveJobNumber.Text); 

     da.Fill(dt); 
     archiveCustomer.DataSource = dt; 
     archiveCustomer.DataBind(); 
    } 
} 

クエリが正しいことを確認してください。

+0

これは私のために働いた。勝つありがとう。コードでSQL文を埋め込むのではなく、ストアドプロシージャを使用するよう少し修正しました。 – jaz1976

関連する問題