【问题标题】:Grid View Row Command Event Post Back网格视图行命令事件回发
【发布时间】:2023-03-13 05:05:02
【问题描述】:

我正在使用 GridView 控件上传文件我正在使用 RowCommand 事件上传,我的场景是这样的

  1. 用户登录并进入页面上传文件
  2. 用户登录,输入一些数据并保存,会进行回传,数据将显示在网格中。

上传功能在场景 1 中运行良好,但在场景 2 之后无法运行 这是我的代码

<asp:GridView ID="GVUsers" runat="server" OnRowDataBound="GVUsers_RowDataBound" OnRowCommand="GVUsers_RowCommand"
    OnRowDeleting="GVUsers_RowDeleting" AutoGenerateColumns="false" CssClass="table">
    <Columns>
            <asp:TemplateField HeaderText="Files" ItemStyle-HorizontalAlign="Left">
                <ItemTemplate>
                    <asp:FileUpload ID="filedoc" runat="server" Width="98%" CssClass="filedoc" />
                    <asp:Button ID="btnuploadfiles" runat="server" CommandName="fileupd" Text="Upload"
                                                            CssClas="uploadbtn" />
                </ItemTemplate>
                 </asp:TemplateField>


    </Columns>
</asp:GridView>

protected void GVUsers_RowCommand(Object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "fileupd")
    {
            //Upload File
    }
}

这就是我的数据绑定方式

if(!Page.IsPostBack)
{
  //Assigning datasource and DataBinding
}

我也尝试在上述情况后绑定网格,即总是绑定网格,但没有运气

我尝试从后面的代码中分配事件处理程序,但同样的问题。 同样在保存按钮上,我在保存后这样做

protected void btnsave_Click(object sender, EventArgs e)
{
 //Assigning datasource and DataBinding
}

根据我的调查,问题出在 btnsave_click,但如果我只使用 GVUsers.DataBind() 它不会在网格中显示新添加的记录。 我也尝试过禁用网格的 ViewState。 我是 DataTable 的数据绑定网格

如何在回发后使 RowCommand 工作,或者如何在回发后重新绑定网格?

【问题讨论】:

  • 如果在使用 GVUsers.Databind() 网格后显示,那么它必须是绑定的,那么它没有显示哪些新数据,更新了页面上的行/单元格?还是数据库中的记录?
  • 如果我只使用 GVUsers.DataBind(){Not re-assign datasource},网格会被隐藏,但如果我也告诉数据源,那么新记录会出现在网格中
  • 上传的文件和用户输入的数据有什么关系?

标签: c# asp.net gridview


【解决方案1】:

你为什么不通过ajax调用保存用户输入的数据并稍后刷新页面..它会帮助你避免回发调用

【讨论】:

    【解决方案2】:

    这里有一些你需要做的改变

    当您的页面第一次加载时bind gridview 在页面加载事件中

    if(!Page.IsPostBack)
    {
      //Assigning datasource and DataBinding
    }
    

    但是当您再次调用GVUsers.DataBind() 时,您需要使用更新的记录再次重新分配数据源

    确保您的grid view 不在更新面板中,因为如果您使用更新面板,您将无法在服务器端获取上传文件

    【讨论】:

      【解决方案3】:

      有时,网格视图的 RowCommand 事件会停止触发。

      您可以尝试的一种解决方案是在每次页面回发时重新绑定网格,即将网格绑定逻辑移出if(!Page.IsPostBack) 条件。

      您将看到 RowCommand 事件现在将成功触发。此解决方案的问题是您将丢失网格中的任何数据捕获,例如行中的文本字段中的数据。如果你没有这种情况,那么这个解决方案是安全的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多