[英]Asp.net GridView OnRowUpdating
我在gridview中使用OnRowUpdating
。 這很簡單,但是由於某種原因它沒有更新。 好像沒有找到EditTemplate
控件。 它的設置有點不同,因為所有控件都在同一列中(可能會引起問題嗎?),並且以“博客”格式設置。 我沒有收到任何運行時錯誤,因此必須是邏輯上的。 這是asp。
ASP
<asp:GridView ID="gvPosts" runat="server" AutoGenerateColumns="False" DataKeyNames="MessageID" GridLines="Vertical" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" Width="693px"
OnPageIndexChanging="gvPosts_PageIndexChanging" OnRowEditing="gvPosts_RowEditing"
OnRowCancelingEdit="gvPosts_RowCancelingEdit" OnRowUpdating="gvPosts_RowUpdating" AllowPaging="True">
<AlternatingRowStyle BackColor="#CCCCCC" />
<Columns>
<asp:TemplateField HeaderText="Posts" HeaderStyle-Font-Size="Larger">
<EditItemTemplate>
<asp:Textbox ID="tbGridTitle" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:Textbox>
<div style="margin-left: 20px">
<p>
<asp:Textbox ID="tbGridAuthor" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:Textbox>
<asp:label ID="lblDate" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:label>
<asp:label ID="lblIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px" Visible="false"></asp:label>
<%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
</p>
</div>
<div style="margin-left: 40px">
<asp:TextBox ID="tbGridMessage" runat="server" Text='<%# Bind("Message") %>' TextMode="MultiLine" Width="450px"></asp:TextBox>
<div>
<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" />
</div>
</div>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:Label>
<div style="margin-left: 20px">
<p>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
<asp:Label ID="lblIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px" Visible="false"></asp:Label>
<%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
</p>
</div>
<div style="margin-left: 40px">
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Message") %>'></asp:Label>
<div>
<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" Visible="false" />
</div>
</div>
</ItemTemplate>
<HeaderStyle Font-Size="Large" />
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" Text="View Comments" OnClick="lbViewComments_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="MessageID" SortExpression="MessageID" Visible="true">
<ItemTemplate>
<asp:Label ID="lblMessageID" runat="server" Text='<%# Bind("MessageID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
<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>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False" Visible="False">
<ItemTemplate>
<asp:LinkButton ID="lbDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" OnClick="lbDelete_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
這是我的RowUpdating代碼。
C#
protected void gvPosts_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvr = (GridViewRow)gvPosts.Rows[e.RowIndex];
int MessageID = Convert.ToInt32(gvPosts.DataKeys[e.RowIndex].Value.ToString());
TextBox Title = (TextBox)gvr.FindControl("tbGridTitle");
TextBox Message = (TextBox)gvr.FindControl("tbGridMessage");
TextBox Author = (TextBox)gvr.FindControl("tbGridAuthor");
try
{
conn.Open();
SqlCommand cmdUpdate = new SqlCommand("UPDATE BlogMessages SET Title = @Title, Message = @Message, Author = @Author WHERE MessageID = @MessageID", conn);
cmdUpdate.Parameters.AddWithValue("@MessageID", MessageID);
cmdUpdate.Parameters.AddWithValue("@Title", Title.Text);
cmdUpdate.Parameters.AddWithValue("@Message", Message.Text);
cmdUpdate.Parameters.AddWithValue("@Author", Author.Text);
cmdUpdate.ExecuteNonQuery();
conn.Close();
gvPosts.EditIndex = -1;
DataBound();
GridControls();
}
catch (Exception ex)
{
lblMessage.Text = "Couldn't update! " + ex.ToString();
}
}
其他所有內容都類似於RowEditing
和RowEditCanceling
但是由於某些原因,我無法更新。 我認為一些新鮮的眼睛也許能夠捕捉到我所缺少的東西。
我也嘗試過這種方法來找到控件,但是沒有運氣。
TextBox Title = (TextBox)gvPosts.Rows[e.RowIndex].FindControl("tbGridTitle");
我已經嘗試了多種方法,但我不記得全部。 提前致謝!
觸發事件的順序可能是問題。請確保您具有與以下事件相同的設置,並對其進行修改以適合您的需求。 我創建了一個Post類
public class Post
{
public String Author { get; set; }
public String Title { get; set; }
public DateTime Date { get; set; }
public String IPAddress { get; set; }
public String Message {get;set;}
public String MessageID { get; set; }
}
然后使用此代碼對其進行測試
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindData();
}
}
public void BindData()
{
ArrayList myList = new ArrayList();
myList.Add(new Post() { Author = "Abide", Title = "The Post", Date = DateTime.Now, IPAddress = "192.168.0.9", Message = "It works", MessageID = "5" });
gvPosts.DataSource = myList;
gvPosts.DataBind();
}
protected void gvPosts_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvr = (GridViewRow)gvPosts.Rows[e.RowIndex];
int MessageID = Convert.ToInt32(gvPosts.DataKeys[e.RowIndex].Value.ToString());
TextBox Title = (TextBox)gvr.FindControl("tbGridTitle");
TextBox Message = (TextBox)gvr.FindControl("tbGridMessage");
TextBox Author = (TextBox)gvr.FindControl("tbGridAuthor");
// do your stuff here
}
protected void gvPosts_RowEditing(object sender, GridViewEditEventArgs e)
{
gvPosts.EditIndex = e.NewEditIndex;
BindData();
}
protected void gvPosts_RowCommand(object sender, GridViewCommandEventArgs e)
{
}
protected void gvPosts_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvPosts.EditIndex = -1;
BindData();
}
}
原來我忽略了我的Page_Load。 我有..
if(Page.IsPostBack)
{
//code here
}
代替..
if(!Page.IsPostBack)
{
//code here
}
新的一天,新鮮的眼睛,終於抓住了我的錯誤。 希望這可以節省將來的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.