2011-03-30 3 views
0

데이터 테이블이 채워지지만 필드 중 하나가 데이터베이스 연결에서 파생 된 드롭 다운 목록입니다. 추가를 클릭하면 내 선택에도 불구하고 항상 동일한 데이터를 추가 한 다음 목록의 첫 번째 항목을 제거합니다.C# DataTable 테이블에서 데이터 추가

ASPX 코드 드롭 다운 목록이 문제를 해결하는 방법에 대한

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(); 
    } 
} 

어떤 생각을위한

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

CS 코드?

+0

사이드 바 : 'DropDownList'의 이름은 txtProduct'입니까? 이 ID를 가진 컨트롤은 Textbox라고 가정합니다. 귀하의 질문에 : DropDownList 바인딩 경우에만'! Page.IsPostBack'? –

+0

'DataBind '에 대한 호출이 선택 항목을 첫 번째 항목으로 재설정한다는 것을 알게 될 것입니다. –

+0

또한'cmd.Connection.Close'와'cmd.Connection.Dispose'를 호출 할 이유가 없습니다. 명령과 연결이'using' 블록에 있기 때문입니다. 자동으로 처리됩니다. –

답변

1

페이지로드시 Fill1() 메서드를 호출한다고 생각합니다. 페이지가 PostBack이면 페이지에로드 Fill1() 이벤트가 다시 호출되고 선택이 취소됩니다. 로드 이벤트에서이 작업이 필요합니다.

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

나는 당신이 SQL 문장의 부분과 DropDownList 선택을 SQL Statement에 연결하는 방법을 놓치고 있다고 생각한다. 뭔가 같은 ...

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

는 참고 : 이것은 단지 설명을위한 것입니다, 나는 한 줄의 코드에서 두 단계를 두지 않을 것이다, 나는 매개 변수를 사용하는 것이 내가 오류 검사의 보트 부하를 추가합니다.

+0

이 작업을 수행 할 ID가 없습니다. 동일한 작업을 수행하는 ProductCode가 있습니까? –

관련 문제