我所学的是C#,所编的是winform结构的,现在我有一个功能不能实现,想请你们帮帮我:
问题要点:
我有一个界面:界面上有一个DataGrid控件,现在想实现几个功能。
1.DataGrid中有四列,第一列列名为A,第二列列名为B,第三列列名为C,第四列列名为D,假如我在C列中某一行输入一个值,相应的B列是等于C列加上D列的值,而且想输入一行就保存一行数据,向数据库SQL插入数据。例:
A                     B                C                D
ABCD            20               15               5

2.如果我在DataGrid中第一行有一条数据,第二行也有一条数据,第三行也有一条数据,但第二行和第三行是第一行数据的子级,也就是说第一行数据为父级,在有子级的情况下,父级是不能输入的,它的值是第二行和第三行的和。例:

A                     B                C                D
ABCD            20               15               5                     此行是不能输入的
   BCD            12               10               2
     CD             8                   5               3

我到现在才写了一个DataGrid控件的框架:代码如下:
 #region Load事件
  private void ucBeginingBalance_Load(object sender, System.EventArgs e)
  {
   OpenBlanceInit();
  }
  #endregion

  #region 填充期初余额表列式
  private void AddDgBlance()
  {
//   this.dt.ColumnChanged+=new DataColumnChangeEventHandler(dt_RowChanged);
   this.dgBlance.DataSource=this.dt;


   DataGridTableStyle dgts=new DataGridTableStyle();
   dgts.MappingName=dt.TableName;
   this.dgBlance.AllowSorting=false;

   DataGridTextBoxColumn SubjectName=new DataGridTextBoxColumn();    //科目名称
   SubjectName.MappingName="CcodeName";
   SubjectName.HeaderText="科目名称";
   SubjectName.Width=220;
   SubjectName.Alignment=HorizontalAlignment.Left;
   SubjectName.ReadOnly=true;
   SubjectName.NullText="";
   
   SubjectName.TextBox.BackColor=Color.White;
   SubjectName.TextBox.Enabled=false;
   dgts.GridColumnStyles.Add(SubjectName);

   DataGridTextBoxColumn Direction=new DataGridTextBoxColumn();    //科目方向
   Direction.MappingName="Bproperty";
   Direction.HeaderText="方向";
   Direction.Width=75;
   Direction.Alignment=HorizontalAlignment.Center;
   Direction.ReadOnly=true;
   Direction.NullText="";
    Direction.TextBox.BackColor=Color.White;
   Direction.TextBox.Enabled=false;
   dgts.GridColumnStyles.Add(Direction);

   DataGridTextBoxColumn MoneyGenus=new DataGridTextBoxColumn();    //科目计量
   MoneyGenus.MappingName="Cmeause";
   MoneyGenus.HeaderText="计量单位";
   MoneyGenus.Width=90;
   MoneyGenus.Alignment=HorizontalAlignment.Center;
   MoneyGenus.ReadOnly=true;
   MoneyGenus.NullText="";
   MoneyGenus.TextBox.BackColor=Color.White;
   MoneyGenus.TextBox.Enabled=false;
   dgts.GridColumnStyles.Add(MoneyGenus);

   DataGridTextBoxColumn YearFirst=new DataGridTextBoxColumn();    //年初余额
   YearFirst.MappingName="YearBeginBalance";
   YearFirst.HeaderText="年初余额";
   YearFirst.Width=100;
   YearFirst.Alignment=HorizontalAlignment.Center;
   YearFirst.NullText="";
   YearFirst.TextBox.loc
   YearFirst.TextBox.DoubleClick+=new EventHandler(TextBox_DoubleClick);   //abcdefg
   dgts.GridColumnStyles.Add(YearFirst);

   DataGridTextBoxColumn Lend=new DataGridTextBoxColumn();      //累计借方
   Lend.MappingName="AddUpDebit";
   Lend.HeaderText="累计借方";
   Lend.Width=100;
   Lend.Alignment=HorizontalAlignment.Center;
   Lend.NullText="";
      Lend.TextBox.LostFocus+=new EventHandler(TextBox_LostFocus);
   dgts.GridColumnStyles.Add(Lend);

   DataGridTextBoxColumn Lender=new DataGridTextBoxColumn();     //累计贷方
   Lender.MappingName="AddupLender";
   Lender.HeaderText="累计贷方";
   Lender.Width=100;
   Lender.Alignment=HorizontalAlignment.Center;
   Lender.NullText="";
   dgts.GridColumnStyles.Add(Lender);

   DataGridTextBoxColumn ExpectFirst=new DataGridTextBoxColumn();    //期初余额
   ExpectFirst.MappingName="BeginingBalance";
   ExpectFirst.HeaderText="期初余额";
   ExpectFirst.Width=100;
   ExpectFirst.Alignment=HorizontalAlignment.Center;
   ExpectFirst.NullText="";
   dgts.GridColumnStyles.Add(ExpectFirst);
            this.dgBlance.TableStyles.Clear();
   this.dgBlance.TableStyles.Add(dgts);
  }
  #endregion

  #region 打开初使化
  private void OpenBlanceInit()
  {
   BeginingBalanceBLL Begin=new BeginingBalanceBLL(base.mUserInfo);
   dt=Begin.Query(new BeginingBalanceEn());
   AddDgBlance();
  }
  #endregion