我在主窗体中定义了全局变量DataGrid dataGrid_query=new DataGrid(),但是dataGird_query添加到窗体上是动态添加的,是这方面有问题吗?

解决方案 »

  1.   

    DataGridTableStyle dgts=new DataGridTableStyle(); 
    dgts.MappingName="loanInfo"; 

    dgts.GridColumnStyles["loanInfoNumber"]=0; 
    ----------------------
    你没有添加GridColumnStyle吧
      

  2.   

    没有添加GridColumnStyle,难道这样dgts.GridColumnStyles["loanInfoNumber"].Width=0; 
    吗?
      

  3.   

    ·你对DataGrid进行一下判断再操作
    if(dataGrid_query != null){//to do}
    ·需要你添加GridColumnStyle,你可以设置隐藏
    myGridColumnStyle.Width = 0;
    ·如果你根据条件显示需要的列,你只需要把向DataGridTableStyle中添加你需要的列,勿须再设置隐藏列
      

  4.   

    to eTopFancy(你的美丽我的回忆):
    1.已经有下面的代码判断dateGrid_query是否存在,如不存在添加,存在则往后执行。怎么还需要你那个判断呢?这好像多余了吧?
    if(!mainForm.Controls.Contains(mainForm.dataGrid_query))  //如果主窗体中没有DataGrid,添加;
    {
      mainForm.dataGrid_query.Dock=DockStyle.Fill;
      mainForm.dataGrid_query.ReadOnly=true;
      mainForm.Controls.Add(mainForm.dataGrid_query);
    }2.我有改了代码如下,但还是错误。
    foreach(DataGridColumnStyle dgcs in DataGridTableStyle.GridColumnStyle)
    {
      if(!checkBox_loanInfoNumber.Checked)   //根据用户在checkBox的情况,确定DataGrid对应的列是否隐藏;
      {
        dgcs.MappingName="loanInfoNumber";
        dgcs.Width=0;
      }
      ……
    }
    -------------
    不知道改为这样可不可以?
    foreach(DataGridColumnStyle dgcs in DataGridTableStyle.GridColumnStyle)
    {
      if(!checkBox_loanInfoNumber.Checked && dgcs.MappingName=="loanInfoNumber")
      {
        dgcs.Width=0;
      }
      ……
    }
    赶快试试~~~
      

  5.   

    showlie(想长膘的小猪……) 
    "我在主窗体中定义了全局变量DataGrid dataGrid_query=new DataGrid(),但是dataGird_query添加到窗体上是动态添加的,是这方面有问题吗?"C#中没有全局变量的概念。就是说不会有全局变量。
      

  6.   

    我的意思是说在类MainForm中定义DataGrid,那你说应该怎么办?请教~~~
      

  7.   

    if(!mainForm.Controls.Contains(mainForm.dataGrid_query))mainForm.dataGrid_query
    这样写的话,表示mainForm一定包含dataGrid_query了
      

  8.   

    楼上说的没错,就是那个定义的datagrid有问题!!请仔细查阅您的代码!
      

  9.   

    楼主给的信息不够,你的代码是运行到哪一步出错,单步调一下。
    如果是mainForm.dataGrid_query.Dock=DockStyle.Fill;就错那是你的DataGrid没有实例化,
    或者是在运行了上面的代码才实例化。
    其实你只用一个DataGrid就够了,接下来就是操作一下DataGridTableStyle比较好。建议楼主在DataGrid绑定不同的表时,使用不同的DataGridTableStyle 
    加上一个新的,或者把旧的去掉。
        DataGridTableStyle myTableStyle = new DataGridTableStyle();
        myTableStyle.MappingName = "yourTableName";
        DataGridColumnStyle myColumnStyle1 = new DataGridTextBoxColumn();
        myColumnStyle1.MappingName = "a";
        myColumnStyle1.HeaderText = "显示字段a";
        DataGridColumnStyle myColumnStyle2 = new DataGridTextBoxColumn();
        myColumnStyle2.MappingName = "b";
        myColumnStyle2.HeaderText = "显示字段b";
        DataGridColumnStyle myColumnStyle3 = new DataGridTextBoxColumn();
        myColumnStyle3.MappingName = "c";
        myColumnStyle3.HeaderText = "显示字段c";
    将这三个DataGridColumnStyle添加到TableStyle中:
        myTableStyle.GridColumnStyles.Add(myColumnStyle1);
        myTableStyle.GridColumnStyles.Add(myColumnStyle2);
        myTableStyle.GridColumnStyles.Add(myColumnStyle3);
    最后将TableStyle添加到DataGrid中:
        dataGrid1.TableStyles.Add(myTableStyle);
    如果不增加就把多余的DataGridColumnStyle从DataGridTableStyle 对象中去掉。
    使用myTableStyle.GridColumnStyles.Remove或RemoveAt之类的方法。
      

  10.   

    to zhzuo(秋枫):
    出现错误的代码是:
    if(!checkBox_loanInfoNumber.Checked)   //根据用户在checkBox的情况,确定DataGrid对应的列是否隐藏;
       dgts.GridColumnStyles["loanInfoNumber"].Width=0; 
    即如果用户选中该字段为显示时,运行dgts.GridColumnStyles["loanInfoNumber"].Width=0;就出现“未将对象引用设置到对象实例”。你的这个代码跟
    foreach(DataGridColumnStyle dgcs in DataGridTableStyle.GridColumnStyle)
    {
      if(!checkBox_loanInfoNumber.Checked && dgcs.MappingName=="loanInfoNumber")
      {
        dgcs.Width=0;
      }
      ……
    }
    应该一样的吧,但是怎么还是不行啊,还是出现这样的错误。
      

  11.   


    即如果用户选中该字段为显示时,运行dgts.GridColumnStyles["loanInfoNumber"].Width=0;
    ====================
    说明你的GridColumnStyles["loanInfoNumber"]对象不存在为null.
    或者是你的dgts为null,空引用,
    最好楼主单步调一下,看看每个阶段DataGrid里面的变量变化情况,这样肯定发现问题。
    如果不是空引用试试下面代码;
    DataGrid1.TableStyles["Products"].GridColumnStyles["QuantityPerUnit"].Width = 0
    或者
    ds.Tables["Products"].Columns["QuantityPerUnit"].ColumnMapping = MappingType.Hidden;
    DataGrid1.SetDataBinding[ds, "Products"];
      

  12.   

    谢谢秋枫,我再调试一下,看看问题到底出在什么地方。
    另外,MappingType.Hidden方法我用过,但是由于用户先看到完整的表的记录,再根据自己的需要去隐藏对该用户无关紧要的字段,因此操作对象为DataGrid,而不是DataSource,如果去操作DataSource就非常麻烦-------哦,可能也行,我以前的方法可能思路不对,我再去试试~~~但是希望对上面那个问题能找到错误的所在……