2011-07-18 14 views
2

私は3つの列fileID、uploadedByとdeleteを持つgridviewテーブルを持っています。ファイルの所有者のみがファイルを削除できます。ファイルを削除した人がファイルの所有者であることをどのように検証できますか?私はログインクレデンシャルを持っており、私はuploadedBy文字列を持っています。ログイン資格情報を取得できますが、クリックされた削除リンクからuploadedBy列を取得できません。行のリンクからグリッドビューの行の詳細を取得

<asp:TemplateField HeaderText="View" ItemStyle-HorizontalAlign="Center"> 
     <ItemTemplate> 
      <asp:HyperLink ID="lnkView" runat="server" NavigateUrl='<%# Eval("Id", "~/ViewFile.aspx?Id={0}") %>' Text="View"></asp:HyperLink> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:HyperLinkField ItemStyle-HorizontalAlign="Center" DataNavigateUrlFields="Id" DataNavigateUrlFormatString="~/DeleteFile.aspx?Id={0}" HeaderText="Delete" Text="Delete" /> 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    {   
    switch (e.Row.RowType) 
    { 
     case DataControlRowType.DataRow: 
     FileInfo myFileInfo = (FileInfo)e.Row.DataItem; 
     switch (myFileInfo.ContentType.ToLower()) 
     { 
      case "image/pjpeg":   // .jpg files 
      case "image/gif":   // .gif files 
      case "application/msword": // .doc files 
      case "text/plain":   // .txt files 
      case "application/vnd.ms-excel": 
      // Do nothing. When the row contains a viewable type, 
      // we want the View link to be enabled. 
      break; 
      default: 
      // Find the View link and disable it. 
      HyperLink myLink = (HyperLink)e.Row.FindControl("lnkView"); 
      myLink.Enabled = false; 
      break; 
     } 
     break; 
    } 
    } 

答えて

2

あなたはRowDataBoundイベントを使用して現在のloginedユーザーとUpdatedBy確認することができます。同じユーザーでない場合は、単に削除ボタンを非表示にします。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     System.Data.DataRow dr = ((System.Data.DataRowView)e.Row.DataItem).Row; 

     if (dr["uploadedBy"].ToString() != HttpContext.Current.User.Identity.Name) 
     { 
      ((Button)e.Row.FindControl("btnDelete")).Visible = false; 
     } 
    } 
} 
+0

エラーが発生しました。 'FileInfo'タイプのオブジェクトを 'System.Data.DataRowView'にキャストすることができません。 – reddevil

+0

表示/非表示の削除ボタンがありますか? –

+0

Nope。次の行にエラーが表示されます。System.Data.DataRow dr = .... – reddevil

関連する問題