网格视图行命令事件回发

时间:2014-05-16 12:21:43

标签: c# asp.net gridview

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

  1. 用户登录并进入页面并上传文件
  2. 用户登录,输入一些数据并保存,回发将发生,数据将显示在网格中。
  3. 上传功能在方案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()它不会在网格中显示新添加的记录。 我也尝试过禁用Grid的ViewState。 我正在使用DataTable数据绑定Grid

    如何在回发后让RowCommand工作或者如何在回发后重新设置数据网格?

3 个答案:

答案 0 :(得分:0)

为什么不通过ajax调用保存用户输入的数据并稍后刷新页面..这会帮助您避免回拨电话

答案 1 :(得分:0)

这是你需要的一些改变

当您的网页首次加载页面加载事件bind gridview

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

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

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

答案 2 :(得分:0)

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

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

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