2016-06-02 2 views
0

Hallo Ich habe ein GridView-Steuerelement und darin ein TextBox-Steuerelement in einem EditItemTemplate-Feld.
Jetzt muss ich den Textfeldtext ändern, wenn der Benutzer den Bearbeitungsmodus betritt.
Wenn ich das Programm ausführen, nimmt das Textfeld den Wert der Beschriftung, die in der ItemTemplate war, und ich kann nicht auf die Textbox zugreifen.
ASPX-:So ändern Sie einen Wert eines Steuerelements in EditItemTemplate in GridView

<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="False" 
ShowHeader="False" onrowcommand="GridView1_RowCommand" 
onrowediting="GridView1_RowEditing" OnRowCancelingEdit="GridView1_Cancel" 
onrowupdating="GridView1_RowUpdating" onrowdeleting="GridView1_RowDeleting" 
onrowdatabound="GridView1_RowDataBound" DataKeyNames="TweetID"> 
<Columns> 
<asp:TemplateField HeaderText="ProfilePicture"> 
<ItemTemplate> 
<asp:ImageButton ID="ProfileImage" runat="server" CommandName="Redirect" 
CommandArgument='<%# Container.DataItemIndex %>' Height="40px" Width="40px" /> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="FullName"> 
<ItemTemplate> 
<asp:label ID="FullNameLabel" runat="server" text='<%#Eval("FullName") %>'></asp:label> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="UserName"> 
<ItemTemplate> 
<asp:Label ID="UserNameLabel" runat="server" Text='<%#Eval("UserName") %>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Tweet"> 
<ItemTemplate> 
<%--<asp:Label ID="TweetLabel" runat="server" Text='<%#Eval("TweetText") %>'></asp:Label>--%> 
<asp:Label ID="TweetLabel" runat="server" Text=""></asp:Label> 
</ItemTemplate> 

<EditItemTemplate> 
<asp:TextBox ID="TweetTB" runat="server" Text='<%#Eval("TweetText") %>'></asp:TextBox> 
</EditItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Picture"> 
<ItemTemplate> 
<asp:Image ID="TweetPic" runat="server" 
ImageUrl='<%#"~/UploadedImages/"+Eval("PicName") %>' Height="125px" Width="222px" /> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="ReTweet"> 
<ItemTemplate> 
<asp:ImageButton ID="ReTweetImgBTN" runat="server" 
ImageUrl="~/SrcImage/retweet-action.png" Height="27px" Width="29px" 
CommandName="ReTweet" CommandArgument='<%# Container.DataItemIndex %>'/> 
<%--<asp:Label ID="ReTweetEd" runat="server" Text="ReTweetEd" Visible="false"></asp:Label>--%> 
<%--<asp:Button ID="ReTweetBTN" runat="server" Text="ReTweet" CommandName="ReTweet" CommandArgument='<%# Container.DataItemIndex %>' />--%> 
<asp:Label ID="ReTweetStat" runat="server" Visible="false"></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Like"> 
<ItemTemplate> 
<asp:ImageButton ID="LikeImgBTN" runat="server" ImageUrl="~/SrcImage/like-action.png" 
Height="27px" Width="29px" CommandName="Like" CommandArgument='<%# Container.DataItemIndex %>'/> 
<%--<asp:Button ID="LikeBTN" runat="server" Text="Like" CommandName="Like" CommandArgument='<%# Container.DataItemIndex %>' />--%> 
<asp:Label ID="LikeStat" runat="server" Visible="false"></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Options"> 
<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> 
<asp:TemplateField HeaderText="TweetID" Visible="false"> 
<ItemTemplate> 
<asp:HiddenField ID="TweetID" runat="server" Value='<%#Eval("TweetID") %>' /> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="UserID" Visible="false"> 
<ItemTemplate> 
<asp:HiddenField ID="UserID" runat="server" Value='<%#Eval("UserID") %>'/> 
</ItemTemplate> 
</asp:TemplateField> 

</Columns> 
</asp:GridView> 

CS-:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Session["UserID"] = 1; // To be removed 
     if(!IsPostBack) 
      BindGridview(); 
    } 
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     int userId = int.Parse(Session["UserID"].ToString()); 
     if (e.CommandName == "Like") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(GridView1.DataKeys[index].Value.ToString()))) 
      { 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(GridView1.DataKeys[index].Value.ToString())); 
       int tweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       LikeHelper.Like(tweetID, userId); 
      } 
      else 
       LikeHelper.Like(int.Parse(GridView1.DataKeys[index].Value.ToString()), userId); 
     } 
     if (e.CommandName == "ReTweet") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(GridView1.DataKeys[index].Value.ToString()))) 
      { 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(GridView1.DataKeys[index].Value.ToString())); 
       int tweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       ReTweetHelper.ReTweet(tweetID, userId); 
      } 
      else 
       ReTweetHelper.ReTweet(int.Parse(GridView1.DataKeys[index].Value.ToString()), userId); 
     } 
     if (e.CommandName == "UnReTweet") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      int RetweetID = ReTweetHelper.GetReTweetIdFromReTweetByUserIdAndTweetId(int.Parse(GridView1.DataKeys[index].Value.ToString()), userId); 
      int TweetID = NewTweetHelper.GetTweetIdFromTweetByReTweetId(RetweetID); 
      ReTweetHelper.RemoveReTweet(RetweetID); 
      NewTweetHelper.GeneralRemoveTweet(TweetID); 
     } 
     if (e.CommandName == "Redirect") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      int TweetID = int.Parse(GridView1.DataKeys[index].Value.ToString()); 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(TweetID)) 
      { 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(TweetID); 
       int RealTweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       int UserID = NewTweetHelper.GetUserIdFromTweetByTweetId(RealTweetID); 
       Response.Redirect("ProfilePage.aspx?UserName=" + UserHelper.GetUserName(UserID)); 
      } 
      else 
       Response.Redirect("ProfilePage.aspx?UserName=" + UserHelper.GetUserName(NewTweetHelper.GetUserIdFromTweetByTweetId(TweetID))); 
     } 
    } 
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GridView1.EditIndex = e.NewEditIndex; 
     GridView1.DataBind(); 
     //TextBox TextBox = GridView1.Rows[e.NewEditIndex].FindControl("TweetTB") as TextBox; 
     //HiddenField TweetID = GridView1.Rows[e.NewEditIndex].FindControl("TweetID") as HiddenField; 
     //TextBox.Text = NewTweetHelper.GetTweetFromTweetByTweetId(int.Parse(TweetID.Value.ToString())).TweetText; 
    } 
    protected void GridView1_Cancel(object sender, GridViewCancelEditEventArgs e) 
    { 
     GridView1.EditIndex = -1; 
     GridView1.DataBind(); 
    } 
    public void BindGridview() 
    { 
     int userId = int.Parse(Session["UserID"].ToString()); 
     ServiceReference1.WebServiceSoapClient objWs = new ServiceReference1.WebServiceSoapClient(); 
     DataSet ds = objWs.SelectTweets(userId, 0); 
     DataTable dt = ds.Tables[0]; 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     int userId = int.Parse(Session["UserID"].ToString()); 
     int index = Convert.ToInt32(e.RowIndex); 
     if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(GridView1.DataKeys[index].Value.ToString()))) 
     { 
      int RetweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(GridView1.DataKeys[index].Value.ToString())); 
      ReTweetHelper.RemoveReTweet(RetweetID); 
      NewTweetHelper.GeneralRemoveTweet(int.Parse(GridView1.DataKeys[index].Value.ToString())); 
     } 
     else 
      NewTweetHelper.GeneralRemoveTweet(Convert.ToInt32(GridView1.DataKeys[index].Value.ToString())); 
    } 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     int userId = int.Parse(Session["UserID"].ToString()); 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      HiddenField userIdLbl = (HiddenField)e.Row.FindControl("UserID"); 
      HiddenField tweetid = (HiddenField)e.Row.FindControl("TweetID"); 

      LinkButton editBt = (LinkButton)e.Row.FindControl("Edit"); 
      editBt.Visible = userId == Convert.ToInt32(userIdLbl.Value); 

      ImageButton ProfileImage = e.Row.FindControl("ProfileImage") as ImageButton; 
      ProfileImage.ImageUrl = "~/UploadedImages/" + UserHelper.GetImageUrl(int.Parse(userIdLbl.Value.ToString())); 

      // if retweet 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString()))) 
      { 
       Tweet tweet = NewTweetHelper.GetTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString())); 
       string FullName = UserHelper.GetName(tweet.UserID); 
       // change tweet 
       Label name = e.Row.FindControl("FullNameLabel") as Label; 
       Label UserName = e.Row.FindControl("UserNameLabel") as Label; 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(tweetid.Value.ToString())); 
       int RealTweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       int RealUserID = NewTweetHelper.GetUserIdFromTweetByTweetId(RealTweetID); 
       name.Text = "Retweeted by " + FullName + "<br>" + UserHelper.GetName(RealUserID); 
       UserName.Text = UserHelper.GetUserName(RealUserID); 
       ProfileImage.ImageUrl = "~/UploadedImages/" + UserHelper.GetImageUrl(RealUserID); 
       editBt.Visible = false; 
      } 

      //if there is image 
      Image img = (Image)e.Row.FindControl("TweetPic"); 
      img.Visible = img.ImageUrl != "~/UploadedImages/"; 

      //stats 
      Label LikeStat = e.Row.FindControl("LikeStat") as Label; 
      Label ReTweetStat = e.Row.FindControl("ReTweetStat") as Label; 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString()))) 
      { 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(tweetid.Value.ToString())); 
       int RealTweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       LikeStat.Text = LikeHelper.AmountOfLikesByTweetId(RealTweetID).ToString(); 
       if (int.Parse(LikeStat.Text.ToString()) > 0) 
        LikeStat.Visible = true; 
       ReTweetStat.Text = ReTweetHelper.AmountOfReTweets(RealTweetID).ToString(); 
       if (int.Parse(ReTweetStat.Text.ToString()) > 0) 
        ReTweetStat.Visible = true; 
      } 
      else 
      { 
       LikeStat.Text = LikeHelper.AmountOfLikesByTweetId(int.Parse(tweetid.Value.ToString())).ToString(); 
       if (int.Parse(LikeStat.Text.ToString()) > 0) 
        LikeStat.Visible = true; 
       ReTweetStat.Text = ReTweetHelper.AmountOfReTweets(int.Parse(tweetid.Value.ToString())).ToString(); 
       if (int.Parse(ReTweetStat.Text.ToString()) > 0) 
        ReTweetStat.Visible = true; 
      } 

      // retweeted 
      if (ReTweetHelper.IsReTweetExistByUserIdAndTweetId(userId,int.Parse(tweetid.Value.ToString()))) 
      { 
       ImageButton Retweet = e.Row.FindControl("ReTweetImgBTN") as ImageButton; 
       Retweet.ImageUrl = "~/SrcImage/retweet-action-on.png"; 
       Retweet.CommandName = "UnReTweet"; 
      } 
      if (NewTweetHelper.IsTweetByUser(int.Parse(tweetid.Value.ToString()), userId)) 
      { 
       ImageButton Retweet = e.Row.FindControl("ReTweetImgBTN") as ImageButton; 
       Retweet.ImageUrl = "~/SrcImage/retweet-action-inactive.png"; 
       Retweet.CommandName = null; 
      } 

      //Like Button 
      ImageButton LikeImg = e.Row.FindControl("LikeImgBTN") as ImageButton; 
      if (NewTweetHelper.IsTweetReTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString()))) 
      { 
       int ReTweetID = NewTweetHelper.GetReTweetIDFromTweetByTweetID(int.Parse(tweetid.Value.ToString())); 
       int RealTweetID = ReTweetHelper.GetTweetIDFromReTweetByReTweetID(ReTweetID); 
       if(LikeHelper.IsUserLikeTweet(userId,RealTweetID))  
        LikeImg.ImageUrl = "~/SrcImage/like-action-on.png"; 
      } 
      else 
      { 
       if (LikeHelper.IsUserLikeTweet(userId,int.Parse(tweetid.Value.ToString()))) 
        LikeImg.ImageUrl = "~/SrcImage/like-action-on.png"; 

      } 

      //Hyper Link Text 

      Label TweetLabel = (Label)e.Row.FindControl("TweetLabel"); 
      //TextBox TweetTB = (TextBox)e.Row.FindControl("TweetTB"); 
      Tweet TweetText = NewTweetHelper.GetTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString())); 
      //TweetTB.Text = "a";// TweetText.TweetText.ToString(); 
      string text = NewTweetHelper.HyperLinkTweet(int.Parse(tweetid.Value.ToString())); 
      //TweetText.TweetText= text; //need? 
      TweetLabel.Text = text; 

      //Change Tb in edit cand do it in RowEditting 
      //if (e.Row.RowState == DataControlRowState.Edit) 
      //{ 
      // TextBox TextBox = e.Row.FindControl("TweetTB") as TextBox; 
      // Tweet Text = NewTweetHelper.GetTweetFromTweetByTweetId(int.Parse(tweetid.Value.ToString())); 
      // TextBox.Text = "abc"; 
      //} 

     } 
    } 
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     HiddenField TweetID = GridView1.Rows[e.RowIndex].FindControl("TweetID") as HiddenField; 
     TextBox TweetText = GridView1.Rows[e.RowIndex].FindControl("TweetTB") as TextBox; 
     NewTweetHelper.UpdateTweet(int.Parse(TweetID.Value), TweetText.Text); 
     GridView1.EditIndex = -1; 
     BindGridview(); 
    } 

Antwort

1

Im RowEditing Ereignis können Sie den EditIndex Wert gesetzt und die Daten an das Gridview neu binden:

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

protected void GridView1_Cancel(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindGridView(); 
} 

Dann können Sie im Ereignis RowDataBound auf die Steuerelemente der Zeile zugreifen:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex == GridView1.EditIndex) 
    { 
     TextBox txtBox = e.Row.FindControl("TweetTB") as TextBox; 
     ... 
    } 
    else 
    { 
     ... 
    } 
} 
+0

Es funktioniert nicht wenn ich das tue lädt die Seite aber nicht die Gridview – Rokni

+0

Wie stellen Sie die Datenquelle ein? – ConnorsFan

+0

Ich verwende eine DataTable als Datenquelle. – Rokni

Verwandte Themen