2013-11-09 4 views
0

Теперь я хочу получить возвращаемое значение строки за строкой. Я нашел способ сделать это, но я не могу получить результат, который я хочу. Он извлекает только строку записи. Вот код:Извлечение значения 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; 
    } 

EDIT

загрузки страницы:

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

Для ItemDataBound:

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

EDIT:

После просмотра вашего редактирования я хотел бы предложить, чтобы изменить строку запроса в загрузке страницы:

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. Я помещаю оператор поиска в Itemdatabound для фильтрации данных. Я сделал это таким образом, это неправильно? – user2769165

+0

Все, что вам нужно, это добавить соединение к первому запросу. См. Мое редактирование. – afzalulh

Смежные вопросы