2015-04-30 6 views
1

будьте осторожны - я относительно новичок в C#! Есть несколько потоков на этом уже, но все они, как правило, имеют сложный код, который я не могу разглядеть с неопределенными объяснениями.Включить кнопку в справочнике

У меня есть datalist, питаемый базой данных SQL, которая будет действовать как раздел комментариев. Я хочу, чтобы включить кнопку для редактирования комментариев, если пользователь либо создал свой комментарий или администратор, но не могу показаться, чтобы выяснить, как:

A) Задача управления кнопки в пределах DataList и

B) Включите его только для комментариев был пользователь должен иметь право сделать это

<asp:DataList ID="DataList2" runat="server"> 
     <ItemTemplate> 
      <br /> 
      Comment: 
      <asp:Label Text='<%# Eval("comment") %>' runat="server" ID="commentLabel" /><br /> 
      Posted on: 
      <asp:Label Text='<%# Eval("postedDate") %>' runat="server" ID="postedDateLabel" /><br /> 
      Posted by: 
      <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# "user.aspx?user=" + Eval ("userName") %>'><%# Eval("userName") %></asp:HyperLink><br /> 
    <!-- Comment edit begins ------------------------------------------------------------------------> 
      <asp:Button ID="commentEditButton" runat="server" Text="Edit" visible="false"/> 

    <!-- Comment edit ends --------------------------------------------------------------------------> 
      </ItemTemplate> 
     </asp:DataList> 

C#:

   conn1.Open(); 

     String qry1 = "SELECT comments.comment, comments.postedDate, users.userName FROM comments INNER JOIN users ON comments.userId=users.Id WHERE [email protected] ORDER BY comments.postedDate DESC"; 

     SqlCommand cmd1 = new SqlCommand(qry1, conn1); 

     SqlDataAdapter da1 = new SqlDataAdapter(cmd1); 

     cmd1.Parameters.AddWithValue("@Id", Request.QueryString["imgid"]); 

     DataSet ds1 = new DataSet(); 

     //Derp? 
     foreach(DataRow row in ds1.Tables) 
     { 
      Int32 userIdData = Int32.Parse(row["comments.userId"].ToString()); 
      if (userIdData.Equals(Int32.Parse(Session["userId"].ToString()))) { 
       //DataList2. commentEditButton.Visible = true; 
      } 
     } 

     da1.Fill(ds1); 

     DataList2.DataSource = ds1; 
     DataList2.DataBind(); 

     conn1.Close(); 

спасибо заранее!

+0

дайте командный аргумент вашей кнопке, а на ItemDatabound сделайте свой материал –

+0

Я ценю вход, но это ничего не значит для меня. У вас есть пример кода? – minus8

ответ

0

Я решил это сам, в конце концов. Я пропустил предоставление DataList a DataKeyField и добавил OnItemCommand и CommandName к Редактировать гиперссылка.

<asp:DataList ID="DataList2" runat="server" DataKeyField="Id" OnItemCommand="DataList2_ItemCommand"> 
    <ItemTemplate> 
     <br /> 
     Comment: 
     <asp:Label Text='<%# Eval("comment") %>' runat="server" ID="commentLabel" /><br /> 
     Posted on: 
     <asp:Label Text='<%# Eval("postedDate") %>' runat="server" ID="postedDateLabel" /><br /> 
     Posted by: 
     <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# "user.aspx?user=" + Eval ("userName") %>'><%# Eval("userName") %></asp:HyperLink><br /> 
<!-- Comment edit begins ------------------------------------------------------------------------> 
     <asp:LinkButton ID="commentEditButton" runat="server" CommandName="editComment" Visible="false">Edit</asp:LinkButton> 
<!-- Comment edit ends --------------------------------------------------------------------------> 
     </ItemTemplate> 
    </asp:DataList> 

Настройка команды:

if (e.CommandName == "editComment") 
{ 
    //Set condition for button visibility etc here 
    String editId = userSearchDataList.DataKeys[e.Item.ItemIndex].ToString(); 
    //do stuff with editId 
} 

Надеется, что это помогает кто-то!

0

Обрабатывать событие пункт DataBound на DataBind и установить условие, чтобы активировать кнопку там

protected void DataList2_ItemDataBound1(object sender, DataListItemEventArgs e) 
    { 
     if (userIdData.Equals(Int32.Parse(Session["userId"].ToString()))) 
     { 
      Button cmdButton = e.Item.FindControl("commentEditButton") as Button; 
      if (cmdButton != null) cmdButton.Visible = true; 
     } 
    } 
+0

Как мне обрабатывать событие привязки элемента к привязке данных? Благодаря! – minus8