c#DataTable从表中添加数据

问题描述:

我有一个数据表被填充,但其中一个字段是从数据库连接派生的下拉列表。当我点击添加它时,总是添加相同的数据,尽管我选择了,然后删除列表中的第一个项目。c#DataTable从表中添加数据

ASPX代码

<asp:TableCell><asp:DropDownList runat="server" ID="txtProduct"></asp:DropDownList></asp:TableCell> 

CS代码下拉列表中

public void Fill1() 
{ 
    string connectionString = WebConfigurationManager.ConnectionStrings["CRM2Sage"].ConnectionString; 
    using (SqlConnection _con = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Products", _con)) 
    { 
     cmd.Connection.Open(); 

     SqlDataReader ddlValues; 
     ddlValues = cmd.ExecuteReader(); 

     txtProduct.DataSource = ddlValues; 
     txtProduct.DataValueField = "Description"; 
     txtProduct.DataTextField = "Description"; 
     txtProduct.DataBind(); 

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

有什么想法就如何解决这一问题?

+0

旁注:你命名一个DropDownList'txtProduct'?我会假设带有这个ID的控件是一个文本框。对你的问题:你是否绑定了DropDownList只有当!!Page.IsPostBack? – 2011-03-30 16:10:34

+0

我想你会发现对'DataBind'的调用会将您的选择重置为第一项。 – 2011-03-30 16:19:18

+0

此外,没有任何理由调用'cmd.Connection.Close'和'cmd.Connection.Dispose',因为在'using'块中有命令和连接。他们会自动处理。 – 2011-03-30 16:20:14

我认为您在页面加载时调用Fill1()方法。当页面回传时,然后再次调用页面加载事件Fill1(),您的选择将被清除。你需要在你的负载事件

if(!Page.IsPostBack) 
{ 
    Fill1(); 
} 

我认为您错过了SQL语句的WHERE部分以及将DropDownList选择连接到SQL Statment的方法。喜欢的东西...

new SqlCommand("SELECT * FROM Products WHERE ProductID = " + txtProduct.SelectedValue , _con)) 

FYI:这只是为了说明,我绝不会放一行代码两步,我会用参数,我想补充的错误检查的船负荷。

+0

我没有Id来执行此操作,我有一个ProductCode可以完成相同的工作吗? – 2011-03-30 17:14:47