zoukankan      html  css  js  c++  java
  • Castle ActiveRecord 在GridView数据绑定时候的一个问题

    在ASP.NET Grid中编辑第一行Row,RowUpdating事件的时候,如果这样写:

     protected void grdCatalog_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                
    this.grdCatalog.SelectedIndex = e.RowIndex;

                
    int id = (int)this.grdCatalog.SelectedValue;
                Catalog ca 
    = CatalogDataAccess.FindCatalogByID(id);

                ca.Name 
    = (grdCatalog.Rows[e.RowIndex].Cells[1].Controls[0as TextBox).Text;
                ca.Comment 
    = (grdCatalog.Rows[e.RowIndex].Cells[2].Controls[0as TextBox).Text;
                ca.Culture 
    =
                    (grdCatalog.Rows[e.RowIndex].Cells[
    3].FindControl("drpCulture"as DropDownList).SelectedValue;

                ca.Update();

                    
    this.grdCatalog.EditIndex = -1;
                   
     this.grdCatalog.DataSource = CatalogDataAccess.FindAll(this.PageIndex, pageSize);
                    
    this.grdCatalog.DataBind();
                
            }     
    那么在DataBind()的时候就说报告一个类型不匹配的错误。如果编辑第一行以外的行都正常,就第一行不行。
    经过反复跟踪调试,我发现如果这样以来好像第一行的对象内部的字段没有被ActiveRecord赋上值,所以出错。
    现在我想了个笨办法把问题解决了,不知道有没有更好的办法。
    方法的思路是这样的:在Update的时候SessionScope已经用过了,那么在获得DataSource的时候就再新用一个SessionScope。用下面这样的代码就解决问题了:
            protected void grdCatalog_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                
    this.grdCatalog.SelectedIndex = e.RowIndex;

                
    int id = (int)this.grdCatalog.SelectedValue;
                Catalog ca 
    = CatalogDataAccess.FindCatalogByID(id);

                SessionScope scope 
    = HttpContext.Current.Items["nh.sessionscope"as SessionScope;
                
                ca.Name 
    = (grdCatalog.Rows[e.RowIndex].Cells[1].Controls[0as TextBox).Text;
                ca.Comment 
    = (grdCatalog.Rows[e.RowIndex].Cells[2].Controls[0as TextBox).Text;
                ca.Culture 
    =
                    (grdCatalog.Rows[e.RowIndex].Cells[
    3].FindControl("drpCulture"as DropDownList).SelectedValue;

                ca.Update();
                
    if (scope != null)
                {
                    scope.Dispose();
                }
                 

                
    using(scope =new SessionScope())
                {
                    HttpContext.Current.Items.Remove(
    "nh.sessionscope");
                    HttpContext.Current.Items.Add(
    "nh.sessionscope",scope);
                    
    this.grdCatalog.EditIndex = -1;
                   
                    
    this.grdCatalog.DataSource = CatalogDataAccess.FindAll(this.PageIndex, pageSize);
                    
    this.grdCatalog.DataBind();
                }
            }   

    代码中涉及一些在ASP.NET用使用ActiveRecord的方法和机制,请参看http://www.castleproject.com/
  • 相关阅读:
    mysql之数据库数据导入EXCEL表格
    Docker 删除所有容器
    Docker之Docker文件,一篇就够了
    Docker 安装与基本操作指令
    shell实例:九九乘法表,各种图形,幸运大抽奖
    Firewalld防火墙(包含firewall-config图形工具和firewall-cmd命令行工具如何使用)
    shell脚本--循环语句、(概念及实例)
    华为ENSP------access、trunk、hybrid配置连载2
    2020-11-16T11:13:27.991012Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 2020-11-16T11:13:27.991065Z 0 [ERROR] Aborting
    华为ESPN-------MSTP连载(4)
  • 原文地址:https://www.cnblogs.com/format/p/539780.html
Copyright © 2011-2022 走看看