2016-04-22 9 views
1

私のプロジェクトでは、twitterのように他の人の投稿を見ることができますが、私はそこに投稿を変更できます。今私の問題は、ユーザーがそのツイートを投稿しなかった場合、私はボタンをロックできません。私はあなたが私のアイデア(特定の変数)が私は各ループのために使用すると思ったツイートのユーザーID(隠しフィールド)と一致するかどうかを確認する方法を私に示すことができますが、私はそれを使用して成功しません。グリッドビューのロックボタンをユーザーIDで

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     ShowHeader="False" onrowcommand="GridView1_RowCommand" 
     onrowediting="GridView1_RowEditing" OnRowCancelingEdit="GridView1_Cancel" 
     onrowupdating="GridView1_RowUpdating" 
     onrowdeleting="GridView1_RowDeleting" > 
    <Columns> 
    <asp:TemplateField HeaderText="UserName"> 
    <ItemTemplate> 
    <asp:Label ID="lbl_Username" runat="server" Text='<%#Eval("UserName") %>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Tweet"> 
    <ItemTemplate> 
    <asp:Label ID="lbl_Tweet" runat="server" Text='<%#Eval("TweetText") %>'></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
    <asp:TextBox ID="Tbx_Tweet" runat="server" Text='<%#Eval("TweetText") %>' ></asp:TextBox> 
    </EditItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Picture"> 
    <ItemTemplate> 
    <asp:Image ID="Pic" runat="server" ImageUrl='<%#"~/UploadedImages/"+Eval("PicName") %>' /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Like"> 
    <ItemTemplate> 
    <asp:Button ID="Button1" runat="server" Text="Like" CommandName="Like" CommandArgument='<%# Container.DataItemIndex %>' /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="ReTweet"> 
    <ItemTemplate> 
    <asp:Button ID="Button2" runat="server" Text="ReTweet" CommandName="ReTweet" CommandArgument='<%# Container.DataItemIndex %>' /> 
    </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderText="TweetID" Visible="true"> 
    <ItemTemplate> 

    <asp:Label ID="lbl_TweetID" runat="server" Text='<%#Eval("TweetID") %>' ></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="UserID" Visible="true"> 
    <ItemTemplate> 
    <asp:Label ID="lbl_UserID" runat="server" Text='<%#Eval("UserID") %>' ></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField > 
        <ItemTemplate > 
         <asp:LinkButton ID="Edit" runat="server" Text="Edit" CommandName="Edit" /> 
        </ItemTemplate> 
    <EditItemTemplate> 
         <asp:LinkButton ID="Delete" runat="server" Text="Delete" CommandName="Delete" /> 
         <asp:LinkButton ID="btn_Update" runat="server" Text="Update" CommandName="Update"/> 
         <asp:LinkButton ID="btn_Cancel" runat="server" Text="Cancel" CommandName="Cancel"/> 
        </EditItemTemplate> 
        </asp:TemplateField> 
    </Columns> 
    </asp:GridView>    

は.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
public partial class Tweets : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     bool f = true; 
     if (!IsPostBack) 
     { 
      foreach (GridViewRow row in GridView1.Rows) 
      { 
      Label l = row.FindControl("UserID") as Label; 
      //Response.End(); 
      //if (int.Parse(l.Text.ToString()) != 1) 
      //{ 
      // Response.End(); 
      // row.Cells[7].Visible = false; 
      //} 
     } 
     BindGridview(); 
     //foreach (GridViewRow row in GridView1.Rows) 
     //{ 
     // Label l = row.FindControl("UserID") as Label; 
     // Response.Write(l.Text); 
     // //if (int.Parse(l.Text.ToString()) != 1) 
     // //{ 
     // // Response.End(); 
     // // row.Cells[7].Visible = false; 
     // //} 
     //} 
    } 
} 
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    int userId = 1; 
    if (e.CommandName == "Like") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     Label l = GridView1.Rows[index].FindControl("lbl_TweetID") as Label; 
     TweetHelper.Like(int.Parse(l.Text), userId); 
    } 
    if (e.CommandName == "ReTweet") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     Label l = GridView1.Rows[index].FindControl("lbl_TweetID") as Label; 
     TweetHelper.ReTweet(int.Parse(l.Text), userId); 

    } 
} 
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 

} 
protected void GridView1_Cancel(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindGridview(); 
} 
public void BindGridview() 
{ 
    int userId = 1; 
    ServiceReference1.WebServiceSoapClient objWs = new ServiceReference1.WebServiceSoapClient(); 
    DataSet ds = objWs.SelectTweets(userId, false); 
    DataTable dt = ds.Tables[0]; 
    GridView1.DataSource = dt; 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     Label l = row.FindControl("UserID") as Label; 
     //if (int.Parse(l.Text.ToString()) != 1) 
     //{ 
     // Response.End(); 
     // // row.Cells[7].Visible = false; 
     //} 
     Response.Write(l.Text); 
    } 

    //int i = 0,x=0,y=0; 
    //DataTable dt1 = new DataTable(); 
    //foreach (DataRow row in dt.Rows) 
    //{ 
    // foreach (object obj in row.ItemArray) 
    // { 
    //  dt1.Rows.Add(dt.Rows[x][4]); 
    //  x++; 
    // } 

    //} 
    //foreach (DataRow row in dt1.Rows) 
    //{ 
    // foreach (object obj in row.ItemArray) 
    // { 
    //  if (obj.ToString() == userId.ToString()) 
    //  { 
    //   GridView1.Rows[i].FindControl("Buttons").Visible = true; 
    //  } 
    //  else 
    //  { 
    //   GridView1.Rows[i].FindControl("Buttons").Visible = false; 
    //  } 
    //  i++; 
    // } 
    //} 
    GridView1.DataBind(); 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     Label l = row.FindControl("UserID") as Label; 
     //if (int.Parse(l.Text.ToString()) != 1) 
     //{ 
     // Response.End(); 
     // // row.Cells[7].Visible = false; 
     //} 
     Response.Write(l.Text); 
    } 

} 
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    Label TweetID = GridView1.Rows[e.RowIndex].FindControl("lbl_TweetID") as Label; 
    TextBox TweetText = GridView1.Rows[e.RowIndex].FindControl("Tbx_Tweet") as TextBox; 
    TweetHelper.Updatetweet(int.Parse(TweetID.Text), TweetText.Text); 
    GridView1.EditIndex = -1; 
    BindGridview(); 
} 
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 

} 
} 

答えて

0

あなたはそれを行うにはより多くのオプションを持っています。

  1. RowDataBoundイベントハンドラとVisibileは/プロパティを有効に設定し、[編集]ボタンを作成します。

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
        if (e.Row.RowType == DataControlRowType.DataRow) 
        { 
         Label userIdLbl = (Label)e.Row.FindControl("lbl_UserID"); 
         LinkButton editBt = (LinkButton)e.Row.FindControl("Edit"); 
         editBt.Visible = currentUserId == Convert.ToInt32(userIdLbl.Text); 
        } 
    } 
    
  2. のuserIdがcurrentUserIdあるかどうかを確認し、属性可視/有効を追加することの背後にあるコード内のメソッドを作成します。 GridViewのテンプレートでの編集ボタンに:

    Visible='<%# IsCurentUserId((int)Eval("UserID")) %> 
    
+0

は、それが動作ありがとう – Rokni

関連する問題