VS 2005
Winform子窗体A,    数据清单.
子窗体B,    数据明细;从子窗体A中的DataGridView中选择一条数据,接着打开子窗体B,
窗体B,是这条数据的明细.,.
HaddkInfo haddkInfo = new HaddkInfo(Hid);  //传一个ID到B页面
haddkInfo.MdiParent = this.MdiParent;
haddkInfo.Show();
其它窗体B中,有一个DataGridView,是一份进货清单.,DataGridView的最后一列,是合计例,是另外计算的.非数据直接读取,
for (int j = 0; j < gridAddk.Rows.Count; j++)//遍历行,计算合计
{
    numberstr = Convert.ToInt32(gridAddk.Rows[j].Cells["inputcount"].Value.ToString());
    pricestr = Convert.ToDouble(gridAddk.Rows[j].Cells["inputprice"].Value.ToString());
    gridAddk.Rows[j].Cells["ViewTotal"].Value = Convert.ToString(numberstr * pricestr);
}
通过断点调试,查得方法都无过错,也都有执行到.,
 只是在B页面的加载方法都执行完之后,断点又跳回到A窗体.,执行 haddkInfo.MdiParent = this.MdiParent;
然后才执行完.这个时候,原先B窗体中的Datagridview中的合计列原先都弄好了,又给清空了.,
另:把haddkInfo.MdiParent = this.MdiParent;这条代码注释掉,那合计列就没什么问题....

解决方案 »

  1.   

    窗体初始化的时候不要执行绑定
    放在page_load里面
      

  2.   

    HaddkInfo haddkInfo = new HaddkInfo(Hid);  //传一个ID到B页面
    haddkInfo.MdiParent = this.MdiParent;
    haddkInfo.Show();上面的代码没有问题.
    你B窗体的载入代码呢?
      

  3.   

    方法就是在 窗体B_Load() 中执行的..
      

  4.   

    数据绑定事件执行了两次。poistchanged
      

  5.   

    窗体B载入代码:int RKid=0;
    //--------
    public HaddkInfo()
    {
      InitializeComponent();
    }
    //----
    public HaddkInfo(int RKid)
    {
      InitializeComponent();
      this.RKid = RKid;
    }
    //---
    private void HaddkInfo_Load(object sender, EventArgs e)
    {
        showrkinfo();
    }
      

  6.   

    没有问题啊,变量尽量不要重名.showrkinfo()的代码呢?
      

  7.   

    showrkinfo()方法没什么问题.,
    只是它执行完会跳回到窗体1,
     变量名的话,也没事,我找其它的名字也是一个问题.,/// <summary>
    /// 显示入库清单
    /// </summary>
    private void showrkinfo()
    {
        string sqlStr;
        double allprice = 0;
        int numberstr = 0;
        double pricestr = 0;
        sqlConn con = new sqlConn();
        sqlStr = "select a.Hid,a.Hnumber,hname,hSpecifications, Lot,Valid,HaddPrice,HaddCount from HaddInfo a inner join HospitalList b on a.Hnumber=b.Hnumber and Haddid='8123154' order by Hid desc";
        try
        {
            gridAddk.DataSource = con.returnDt(sqlStr);
            for (int j = 0; j < gridAddk.Rows.Count; j++)//遍历行,计算合计
            {
                numberstr = Convert.ToInt32(gridAddk.Rows[j].Cells["inputcount"].Value.ToString());
                pricestr = Convert.ToDouble(gridAddk.Rows[j].Cells["inputprice"].Value.ToString());
                gridAddk.Rows[j].Cells["ViewTotal"].Value = Convert.ToString(numberstr * pricestr);
                allprice += numberstr * pricestr;
            }
            txtallprice.Text = allprice.ToString();//总价
        }
        catch (Exception ex)
        {
            MessageBox.Show("异常错误:" + ex.Message + "!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
      

  8.   

    代码没有问题:你试着传数据行试试:
    int RKid=0;
    //--------
    public HaddkInfo()
    {
      InitializeComponent();
    }
    //----
    public HaddkInfo(DataGridViewRow dgvr)
    {
      InitializeComponent();
      this.RKid = RKid;
    }
    //---
    private void HaddkInfo_Load(object sender, EventArgs e)
    {
        showrkinfo();
    }
      

  9.   

    DataGridViewRow dgvrNew;
    //--------
    public HaddkInfo()
    {
      InitializeComponent();
    }
    //----
    public HaddkInfo(DataGridViewRow dgvr)
    {
      InitializeComponent();
      dgvrNew= dgvr;
    }
    //---
    private void HaddkInfo_Load(object sender, EventArgs e)
    {
        showrkinfo();
    }
      

  10.   

    是需要再次查询的.,.
     窗体A,DataGridView中只是显示几个主要的字段.,
    窗体B要显示所有的字段,有十几个.,
     而且还有一个DataGridView,是这一份订单的明细表.,.,.
      

  11.   

    我写了份测试代码.,
     http://www.yuanyangmy.com/AaronCode/MDITest.rar不关传参的事,就算不传参数也是同样.,
     测试代码直接运行,数据也全在里头了.这个问题已经困扰很久了,还请指教.,.
      

  12.   

    InitialComponent()方法的问题,注意一下.