2013-07-05 32 views
0

我有一个表有几列,我想添加一个没有给它一个值的列,因为它是一个(有点)复杂的对象,每次使用该表时可能都没用。我可以在数据绑定后期创建列值吗?

所以我当前的代码看起来是这样的:

  var com = new SqlConnection(functions.ConnectionString).CreateCommand(); 
      com.CommandText = @" 
SELECT 
    S.id 
    , S.Name 
    , S.MemberID 
FROM dbo.SubSets AS S 
WHERE S.SubsetType = 0 
AND S.MemberId > 1 
"; 
      this.tblSubsets = new DataTable(); 

      new SqlDataAdapter(com).Fill(this.tblSubsets); 

      this.tblSubsets.Columns.Add(new DataColumn() 
      { 
       AllowDBNull = true 
       , ColumnName = "Member" 
       , DataType = typeof(object) // ? 
       , DefaultValue = DBNull.Value // late binding mechanism? 
      }); 

我怎样才能让该列Member岿然不动“空”,直到它被使用DoSomethingwith(table.Rows[x]["Member"])

回答

0

我猜你不行。

我结束了存储Func<T>并自动设置该字段,每当一行被添加到表中。
再加上关闭字典服务的性能目标。

  this.tblSubsets = new DataTable(); 

      this.tblSubsets.Columns.AddRange(new DataColumn[] { 
       new DataColumn() 
       { 
        AllowDBNull = false 
        , ColumnName = "Member" 
        , DataType = typeof(Func<Member>) 
       } 
      }); 

      var members = new Dictionary<int, Member>(); 
      this.tblSubsets.RowChanged += new DataRowChangeEventHandler((object sender, DataRowChangeEventArgs e) => 
      { 
       if (e.Action != DataRowAction.Add) 
       { 
        return; 
       } 

       e.Row["Member"] = new Func<Member>(() => 
       { 
        Member returnValue; 
        var mid = Convert.ToInt32(e.Row["MemberID"]); 

        if (!members.TryGetValue(mid, out returnValue)) 
        { 
         members.Add(mid, (returnValue = new Member(mid))); 
        } 

        return returnValue; 
       }); 
      }); 


      var com = new SqlConnection(functions.ConnectionString).CreateCommand(); 
      com.CommandText = @" 
SELECT 
    S.id 
    , S.Name 
    , S.MemberID 
FROM dbo.SubSets AS S 
WHERE S.SubsetType = 0 
"; 
      new SqlDataAdapter(com).Fill(this.tblSubsets); 
相关问题