Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net GridView在线更新_C#_Asp.net_Gridview_Sql Update - Fatal编程技术网

C# Asp.net GridView在线更新

C# Asp.net GridView在线更新,c#,asp.net,gridview,sql-update,C#,Asp.net,Gridview,Sql Update,我正在gridview中使用onrowUpdate。这是相当直接的,但出于某种原因,它没有更新。这就好像它没有找到EditTemplate控件一样。它的设置有点不同,因为所有控件都在一个列中(可能是这导致了问题?),并且它是以“blog”格式设置的。我没有收到任何运行时错误,因此必须是逻辑错误。这是asp ASP <asp:GridView ID="gvPosts" runat="server" AutoGenerateColumns="False" DataKeyNames="Messa

我正在gridview中使用
onrowUpdate
。这是相当直接的,但出于某种原因,它没有更新。这就好像它没有找到
EditTemplate
控件一样。它的设置有点不同,因为所有控件都在一个列中(可能是这导致了问题?),并且它是以“blog”格式设置的。我没有收到任何运行时错误,因此必须是逻辑错误。这是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>
                        &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>
                    </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>
其他一切,如
行编辑
行编辑取消
,但由于某些原因,我无法更新。我想一些新的眼睛也许能抓住我错过的东西

我也试过用这个来寻找控制,但没有运气

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();

    }


}

结果我忽略了我的页面加载。我有

if(Page.IsPostBack)
{
    //code here
}
而不是

if(!Page.IsPostBack)
{
    //code here
}

新的一天,新鲜的眼睛终于抓住了我的错误。希望这能为将来节省一些时间

您确定您的SQL工作正常吗?请使用断点检查messageID。是的,sql工作正常。我已经对文本进行了硬编码,以便重新验证并正确更新。您的一个链接按钮缺少ID。我尝试过不分页,您的代码和标记对我有效。我认为这对您有效。我使用的所有4个链接按钮都有ID。我仍然不确定问题出在哪里。
if(!Page.IsPostBack)
{
    //code here
}