2015-01-03 2 views
2

У меня есть gridview, и я хочу проверить некоторые ограничения перед редактированием строки. Более конкретно, если пользователь является автором сообщения, он может редактировать строку.Ограничения проверки Gridview перед редактированием

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
      AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" 
      DataKeyNames="id" DataSourceID="SqlDataSource1" ForeColor="#333333" 
      GridLines="None"> 
      <AlternatingRowStyle BackColor="White" /> 
      <Columns> 
       <asp:TemplateField ShowHeader="False"> 
        <EditItemTemplate> 
         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
          CommandName="Update" Text="Update"></asp:LinkButton> 
         &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
          CommandName="Cancel" Text="Cancel"></asp:LinkButton> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
          CommandName="Edit" Text="Edit"></asp:LinkButton> 
         &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
          CommandName="Delete" Text="Delete"></asp:LinkButton> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" 
        SortExpression="id" /> 
       <asp:BoundField DataField="topicID" HeaderText="topicID" 
        SortExpression="topicID" /> 
       <asp:BoundField DataField="author" HeaderText="author" 
        SortExpression="author" /> 
       <asp:BoundField DataField="date" HeaderText="date" SortExpression="date" /> 
       <asp:TemplateField HeaderText="content" SortExpression="content"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("content") %>' class="com"></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label1" runat="server" Text='<%# Bind("content") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
      <EditRowStyle BackColor="#2461BF" /> 
      <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#EFF3FB" /> 
      <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
      <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
      <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
      <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
     </asp:GridView> 

Я имею в виду, чтобы добавить OnClick() и удалить CommandName из ItemTemplate, но я не вижу, как я мог бы запустить Edit в моей функции валидации.

ответ

0

Вы считаете правильным. add onClick() и check

protected void IBNew_Click(object sender, ImageClickEventArgs e) 
    { 
     if (!_User.HasPermission("IMS", "T00-0001", PermissionTypes.Create)) 
     { 
      js.ShowUPAlert(this, "Permission denied – Please contact your administrator"); 
     } 
     else 
     { 
      Response.Redirect("EditCategory.aspx"); 
     } 

    } 

Вы можете написать свою собственную логику, чтобы проверить разрешение.

Вы можете также использовать событие RowDataBound, чтобы найти кнопку редактирования и включить/отключить ее после проверки разрешения.

protected void gvShow_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton lnkEdit= e.Row.FindControl("lnkEdit") as LinkButton; 
      if(//your condition) 
      { 
      lnkEdit.Enable=true\false; 
      } 
     } 
} 
+0

Это хороший трюк, чтобы решить мою проблему. Перенаправление должно быть включено в оператор if в моем случае, учитывая, что я редактирую свой ответ на той же странице. – vladmateinfo

0

Другое решение - установить Атрибут Enabled на Edit Button.

<asp:LinkButton ID="LinkButtonIEDEdit" runat="server" CausesValidation="False" 
           CommandName="Edit" Text="Edit" 
           Enabled='<%# setEdit(Convert.ToString(Eval("author"))) %>'></asp:LinkButton> 

Backgroud код:

protected bool setEdit(string author) 
{ 
    //check cond 
}