【问题标题】:jqgrid asp.net webforms Server side SelectedRow property emptyjqgrid asp.net webforms 服务器端 SelectedRow 属性为空
【发布时间】:2012-06-18 16:26:55
【问题描述】:

我正在尝试让这个示例工作 Get Selected Row (on server)

但对我来说,SelectedRow 属性始终为空。

唯一的区别是我使用 Page_load 事件来填充我的网格。 当我按下表单上的按钮时,它会进行回发,并重新填充丢失行选择的网格。

示例代码:

if (!Page.IsPostBack )
    {
        UserBusinessObject userBO = new UserBusinessObject();
        GRDUsers.DataSource = userBO.GetUsersbyProfileID(SessionFacade.Id);
        GRDUsers.DataBind();
    }


 protected void btnEdit_Click(object sender, EventArgs e)
{
     if (String.IsNullOrEmpty(GRDUsers.SelectedRow))
     {
         lblError.Visible = true;
     }
     else
     {
         Response.Redirect(string.Format("~/Manage/EditUserRoles.aspx?username={0}",GRDUsers.SelectedRow));

     }

}

我还注意到,在单击按钮时,我的页面加载会触发两次(第一次回发是真的,第二次是假的)根据 jqgrid 的帖子,这是故意的。但我认为这可能会导致我的悲伤。

【问题讨论】:

  • 我注意到只有当我使用母版页时才会出现这种情况,没有它我的服务器端角色选择是完美的
  • 请提供html murkup。

标签: asp.net webforms jqgrid-asp.net


【解决方案1】:

您始终必须设置 DataSource,因为它不会保存在 ViewState 或其他任何地方。所以代码必须是:

UserBusinessObject userBO = new UserBusinessObject();
GRDUsers.DataSource = userBO.GetUsersbyProfileID(SessionFacade.Id);

if (!Page.IsPostBack )
{
    GRDUsers.DataBind();
}

【讨论】:

  • 如果你没有调用databind那么你不需要设置数据源。
  • @MajoB 你调用了DataBind,但是你必须在对数据做些什么之后调用它,我的意思是,在PageLoad +回发时你避免制作DataBind,你这样做,onClick执行操作后的事件(在 PageLoad 之后)。
  • 不,不是这样。原来问题发生在我在内容页面中工作时。如果您使用他们的示例应用程序,并围绕母版页构建它,那么问题就发生了。
【解决方案2】:

与 JQGrid 的人合作,我们解决了这个问题。这是他们网格中的一个错误,已在 v4.5.0.0 中修复

see here for details

我可以确认这修复了错误,并且世界再次一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多