2013-11-09 1 views
0

이제 datatable 값을 한 줄씩 검색하려고합니다. 나는 그것을 할 길을 찾았지만, 나는 원하는 결과를 얻을 수 없다. 레코드 줄만 검색합니다.DataTable 값을 행 단위로 검색하십시오.

MySqlConnection connStr = new MySqlConnection(); 
connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; 
String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id"; 
MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr); 
connStr.Open(); 
cmdSearch.Parameters.AddWithValue("@id", "M000001"); 


MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();    
dt.Load(dtrRead2); 

dtrRead2.Close(); 
connStr.Close(); 


if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 
    String s = (String)(DataBinder.Eval(e.Item.DataItem, "PersonID")); 
    String val = ""; 


    for (int i = 0; i < dt.Rows.Count ; i++) 
    { 
     //val = dt.Rows[i]["PersonIDB"].ToString(); 

     if (dt.Rows[i]["PersonIDB"].ToString().Equals(s)) 
     e.Item.Visible = false; 
     else 
     e.Item.Visible = true; 
    } 

편집

페이지로드 : 다음하여 ItemDataBound를 들어

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      try 
      { 
       MySqlConnection connStr = new MySqlConnection(); 
       connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; 
       String searchOverall = "SELECT PersonID, PersonName, Email, Picture FROM Person"; 
       MySqlCommand cmdSearch = new MySqlCommand(searchOverall, connStr); 
       connStr.Open(); 

       MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader(); 
       friendRepeater.DataSource = dtrRead2; 
       friendRepeater.DataBind(); 
       dtrRead2.Close(); 
       dtrRead2 = null; 

       connStr.Close(); 

      } 
      catch (Exception ex) 
      { 
       //MessageBox.Show(ex.ToString()); 
      }    
     }    
    } 

: 당신은 제대로 중계기를 채우기되지

protected void ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     //String personID = ""; 
     DataTable dt = new DataTable(); 

     try 
     { 
      MySqlConnection connStr = new MySqlConnection(); 
      connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; 
      String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id"; 
      MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr); 
      connStr.Open(); 
      cmdSearch.Parameters.AddWithValue("@id", "M000001"); 

      MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();    
      dt.Load(dtrRead2); 

      dtrRead2.Close(); 
      connStr.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      String s = (String)(DataBinder.Eval(e.Item.DataItem, "PersonID")); 
      String val = ""; 


       for (int i = 0, count = dt.Rows.Count; i < count ; i++) 
       { 
        //val = dt.Rows[i]["PersonIDB"].ToString(); 
        //DataRow dr = dt.Rows[i]; 

        if (dt.Rows[i]["PersonIDB"].ToString().Equals(s)) 
         e.Item.Visible = false; 
        else 
         e.Item.Visible = true; 
       }    
     } 
    } 
+0

연결 문자열에서 사용자 이름/암호를 제거하고 서버의 암호를 변경하려고합니다. – dav1dsm1th

답변

0

여기에 코드입니다. 그 결과는 아래와 같습니다 :

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> 
    <HeaderTemplate> 
     <table> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td>'<%# Eval("PersonIDB")%>'</td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

그리고 중계기의하여 ItemDataBound는 다음과 같이 보일 수 있습니다 :

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // Do anything special you want for the item 
    } 
} 

그리고 일반적으로 페이지로드에서, 리피터에 데이터 소스를 바인딩하는 것을 잊지 마세요 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     LoadData(); 
    } 
} 

당신의 LoadData() 메소드는 같아야 장소 :

private void LoadData() 
{ 
    DataTable dt = new DataTable(); 
    MySqlConnection connStr = new MySqlConnection(); 
    connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; 
    String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id"; 
    MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr); 
    connStr.Open(); 
    cmdSearch.Parameters.AddWithValue("@id", "M000001"); 

    MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader(); 
    dt.Load(dtrRead2); 

    dtrRead2.Close(); 
    connStr.Close(); 

    Repeater1.DataSource = dt; 
    Repeater1.DataBind(); 
} 

편집 : 페이지로드에서 쿼리 문자열을 변경 제안

당신의 편집을보고 한 후 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     try 
     { 
      MySqlConnection connStr = new MySqlConnection(); 
      connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; PesronIDB 
      //Change query to include PersonIDB    
      String searchOverall = "SELECT P.PersonID, P.PersonName, P.Email, P.Picture, CF.PersonIDB FROM Person P LEFT JOIN contactFriend CF ON P.PersonID = CF.PersonID"; 
      MySqlCommand cmdSearch = new MySqlCommand(searchOverall, connStr); 
      connStr.Open(); 

      MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader(); 
      friendRepeater.DataSource = dtrRead2; 
      friendRepeater.DataBind(); 
      dtrRead2.Close(); 
      dtrRead2 = null; 

      connStr.Close(); 

     } 
     catch (Exception ex) 
     { 
      //MessageBox.Show(ex.ToString()); 
     }    
    }    
} 

중계기의하여 ItemDataBound에서 당신이 어떤 쿼리를 실행할 필요가 없습니다.

+0

안녕하세요 .. 제 편집을 참조하십시오. 그 전에는 이미 내 pageload에 databind가 있습니다. Itemdatabound에 검색 문을 넣으면 데이터를 필터링합니다. 이런 식으로 잘못 했나요? – user2769165

+0

첫 번째 쿼리에 조인을 추가하면됩니다. 내 편집을 참조하십시오. – afzalulh