我有dropdownlistProdID,Namelabel& Quantitytextbox。
DropDownList包含来自我的数据库的数据
&安培;
当selectindexchanged, 它应该填写Namelabel
当我点击我的下拉列表中的数据
时发生错误这是我的代码ASP
<table >
<tr>
<td>PO#</td>
<td>Product#</td>
<td class="style2">
Product Name
</td>
<td>
Quantity
</td>
</tr>
<tr>
<td>
<asp:Label ID="POID" runat="server" BorderColor="Black" Font-Size="Larger" />
</td>
<td>
<asp:DropDownList ID="ddlProdID" runat="server" class="form-control"
AutoPostBack="True" onselectedindexchanged="ddlProdID_SelectedIndexChanged"></asp:DropDownList>
</td>
<td class="style2">
<asp:Label ID="Name" runat="server"></asp:Label>
</td>
</td>
<td>
<asp:TextBox ID="Quantity" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style3"></td>
<td class="style2"></td>
<td>
</td>
<td>
<asp:Button ID="AddProduct" runat="server" Text="Add Product"
BackColor="#999966" onclick="AddProduct_Click" /></td>
</tr>
这里是CODE BEHIND
public partial class PODetails : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(Helper.GetCon());
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddProducts();
GetPO();
int GetProductID;
int GetSupplierID;
LoadOptions();
}
}
protected void LoadOptions()
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT ProductID FROM Products";
cmd.Parameters.AddWithValue("@ProductID", ddlProdID.SelectedValue);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable Products = new DataTable();
da.Fill(Products);
ddlProdID.DataSource = Products;
ddlProdID.DataTextField = "ProductID";
ddlProdID.DataValueField = "ProductID";
ddlProdID.DataBind();
}
protected void ddlProdID_SelectedIndexChanged(object sender, EventArgs e)
{
string ProductID = ddlProdID.SelectedItem.Value;
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT ProductID FROM Products";
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
Name.Text = dr.GetString(1);
}
}
感谢老兄!请帮助
答案 0 :(得分:2)
您只读取一个字段,只读取数据库中的一个值。
为什么不使用SqlCommand.ExecuteScalar
要解决此问题,可以更改
Name.Text = dr.GetString(1);
到
Name.Text = dr.GetString(0);
由于C#使用了基于0的索引。
答案 1 :(得分:0)
问题在于您的查询。您甚至没有从数据库中检索Name
并期望显示它。
修复了SelectedIndexChanged
事件处理程序中的代码:
cmd.CommandText = "SELECT ProductID, NAME FROM Products WHERE ProductID = @ProductID"; //change column name as you have in database
cmd.Parameters.AddWithValue("@ProductID", ddlProdID.SelectedValue); //get data for specific product
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
Name.Text = dr.GetString(1);
}
答案 2 :(得分:0)
固定
在@Shaharyar先生的帮助下
protected void ddlProdID_SelectedIndexChanged(object sender, EventArgs e)
{
string ProductID = ddlProdID.SelectedItem.Value;
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT ProductID, Name FROM Products WHERE ProductID=@ProductID";
cmd.Parameters.AddWithValue("@ProductID", ddlProdID.SelectedValue);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows) {
dr.Read();
Name.Text = dr.GetString(1);
}
}
刚刚修复了SelectedIndexChanged
中的代码谢谢大家