2013-11-09 3 views
2

Я хочу скрыть элемент повторителя, который уже добавлен в таблицу, но теперь я столкнулся с некоторой проблемой, которая даже была сделана для условия сравнения, и повторитель также покажет общий контент на основе таблицы. Вот моя кодирующая часть. Надежда будет знать ошибку, которую я сделал.Скрыть элемент ретранслятора с условием

код Дизайнер:

<script language="C#" runat="server"> 
protected void ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     String personID = ""; 
     try 
     { 
      MySql.Data.MySqlClient.MySqlConnection connStr = new MySql.Data.MySqlClient.MySqlConnection(); 
      connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; 
      String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id"; 
      MySql.Data.MySqlClient.MySqlCommand cmdSearch = new MySql.Data.MySqlClient.MySqlCommand(searchPerson, connStr); 
      connStr.Open(); 
      cmdSearch.Parameters.AddWithValue("@id", "M000001"); 


      MySql.Data.MySqlClient.MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader(); 

      if (dtrRead2.Read()) 
      { 
       personID = (String)dtrRead2["PersonIDB"]; 
      } 

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

     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      Label lblID = (Label)e.Item.FindControl("lblID"); 
      string s = lblID.Text; 

      if (s == personID) 
      { 
       lblID.Visible = false; 
       e.Item.FindControl("photoImage").Visible = false; 
       e.Item.FindControl("lblName").Visible = false; 
       e.Item.FindControl("deleter").Visible = false; 
       e.Item.FindControl("lblEmail").Visible = false; 
      } 
      else 
      { 
       lblID.Visible = true; 
       e.Item.FindControl("photoImage").Visible = true; 
       e.Item.FindControl("lblName").Visible = true; 
       e.Item.FindControl("deleter").Visible = true; 
       e.Item.FindControl("lblEmail").Visible = true; 
      } 
     } 

    } 
    </script> 

<asp:Repeater ID="friendRepeater" runat="server" OnItemDataBound = "ItemDataBound"> 
    <HeaderTemplate> 
    <table cellpadding="0" cellspacing="0"> 
    </HeaderTemplate> 


    <ItemTemplate> 
    <tr> 
     <td> 
     <div style=" padding-left:180px;"> 
      <div id="leftHandPost" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;"> 
       <div id="childLeft" style=" padding-left:5px;"> 
       <div id="photo" style=" border: thin solid black; width:100px;height:100px;"> 
        <asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" /> 
       </div> 
       </div><!--childLeft--> 
      </div><!--leftHandPost--> 
      </div> 
     </td> 

         <td> 
          <div id="rightHandPost" style=" float:right; padding-right:260px;"> 
           <div id="childRight" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;"> 
            <strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName") %></asp:Label></strong><br /> 
            <div style=" float:right; padding-right:10px;"> 

            <asp:ImageButton id="deleter" ImageUrl="App_Themes/Health/images/blue/Add.png" CausesValidation="False" runat="server" 
         AlternateText="Add" ImageAlign="absmiddle" BorderStyle="None" Width="21" Height="21" 
         OnCommand="add" OnClientClick="return confirm('Are you sure you want to add this?');" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "PersonID") %>' /> 
         </div><br /> 
            <asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br /> 
            <asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label> 
           </div><!--childRight--> 
          </div><!--rightHandPost--> 
         </td> 
        </tr> 

    </ItemTemplate> 

    <AlternatingItemTemplate> 
    <tr> 
     <td> 
     <div style=" padding-left:180px;"> 
      <div id="Div1" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;"> 
       <div id="Div2" style="padding-left:5px;"> 
       <div id="Div3" style=" border: thin solid black; width:100px;height:100px;"> 
        <asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" /> 
       </div> 
       </div><!--childLeft--> 
      </div><!--leftHandPost--> 
     </div> 
     </td> 

         <td> 
          <div id="Div4" style=" float:right; padding-right:260px;"> 
           <div id="Div5" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;"> 
            <strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName")%></asp:Label></strong> 
            <div style=" float:right; padding-right:10px;"> 
            <asp:ImageButton id="deleter" ImageUrl="App_Themes/Health/images/blue/Add.png" CausesValidation="False" runat="server" 
         AlternateText="Add" ImageAlign="absmiddle" BorderStyle="None" Width="21" Height="21" 
         OnCommand="add" OnClientClick="return confirm('Are you sure you want to add this?');" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "PersonID") %>' /> 
         </div><br /> 
            <br /> 
            <asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br /> 
            <asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label> 
           </div><!--childRight--> 
          </div><!--rightHandPost--> 
         </td> 
        </tr> 
    </AlternatingItemTemplate> 

    <FooterTemplate> 
    </table> 
    </FooterTemplate> 

</asp:Repeater> 

Для PageLoad:

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

+1 для обработки ошибок MessageBox и для встроенного CSS – CodeZombie

+0

Erhmm Так жаль ~~ я не понимаю .. может объяснить дальше? – user2769165

ответ

1

Попробуйте сделать весь элемент невидимым вместо по частям, как это:

if (s == personID) 
{ 
    e.Item.Visible = false; 
} 

Кроме того, вы может фильтровать результаты по условию до того, как вы привяжетесь к элементу управления ретранслятора.

+0

Я постараюсь сделать всю вещь невидимой, но функции нет. Что означает, что весь ItemDataBound не функционирует? Как вы говорите, прежде чем связывать фильтр управления ретрансляторами, результат может кратко объяснить на нем? действительно очень спасибо: D – user2769165

+0

Я предполагаю, что вы выполняете какую-то функцию поиска? Независимо от того, какой элемент управления (например, кнопка) вызывает поиск, тогда в этом обработчике кликов измените свой SQL SELECT, чтобы включить предложение where для значения, введенного в текстовое поле, вместо того, чтобы пытаться сопоставить значение текстового поля при привязке. –

+0

Привет, я решил свою проблему. Кстати, я просто скрою первую строку содержимого базы данных. Если я хочу скрыть больше чем 1, что мне делать? спасибо – user2769165

0

Я думаю, вы должны отфильтровать данные в вашем SQL-запросе, чтобы привязать только нужные данные к ретранслятору.

Я предполагаю, что вы хотите, чтобы скрыть строки, которые уже добавлены в contactFriend таблицы путем заполнения PersonIDB и дата значение, не так ли?

Если да, то вы должны изменить строку SQL запроса, чтобы быть такими, как

SELECT p.PersonID, p.PersonName, p.Email, p.Picture 
FROM Person AS p JOIN contactFriend AS cf ON p.PersonID = cf.PersonID 
WHERE cf.PersonIDB IS NOT NULL AND cf.[date] IS NOT NULL 

И это другой фильтруются запрос использовать, если вы никогда не PersonId данных в contactFriend таблице, пока не добавлено значение PersonIDB (I означает, что вы вставить PersonId Снегурочка с PersonIDB, чтобы создать новую строку в то время)

SELECT PersonID, PersonName, Email, Picture 
FROM Person 
WHERE PersonID NOT IN (SELECT PersonID FROM contactFriend) 
+0

Что означает, что мне больше не нужно использовать ItemDataBound? – user2769165

+0

Нет, вам по-прежнему нужно использовать данные для повторителя, но вы можете удалить контрольную точку, я имею в виду эту область ** if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType. AlternatingItem) {...} ** – Alice

+0

BUt Я уже привязываю его в pageload, и он работает. SELECT PersonID, PersonName, E-mail, Picture ОТ Лица WHERE PersonID NOT IN (SELECT PersonIDB FROM contactFriend WHERE PersonID = @id) Я меняю это на свою pageload и работаю. – user2769165

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