高手帮我看看这段代码到底错在哪里?怎么总是跳出“未将对象引用设置到对象实例”? 我在主窗体中定义了全局变量DataGrid dataGrid_query=new DataGrid(),但是dataGird_query添加到窗体上是动态添加的,是这方面有问题吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataGridTableStyle dgts=new DataGridTableStyle(); dgts.MappingName="loanInfo"; dgts.GridColumnStyles["loanInfoNumber"]=0; ----------------------你没有添加GridColumnStyle吧 没有添加GridColumnStyle,难道这样dgts.GridColumnStyles["loanInfoNumber"].Width=0; 吗? ·你对DataGrid进行一下判断再操作if(dataGrid_query != null){//to do}·需要你添加GridColumnStyle,你可以设置隐藏myGridColumnStyle.Width = 0;·如果你根据条件显示需要的列,你只需要把向DataGridTableStyle中添加你需要的列,勿须再设置隐藏列 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; } ……}赶快试试~~~ showlie(想长膘的小猪……) "我在主窗体中定义了全局变量DataGrid dataGrid_query=new DataGrid(),但是dataGird_query添加到窗体上是动态添加的,是这方面有问题吗?"C#中没有全局变量的概念。就是说不会有全局变量。 我的意思是说在类MainForm中定义DataGrid,那你说应该怎么办?请教~~~ if(!mainForm.Controls.Contains(mainForm.dataGrid_query))mainForm.dataGrid_query这样写的话,表示mainForm一定包含dataGrid_query了 楼上说的没错,就是那个定义的datagrid有问题!!请仔细查阅您的代码! 楼主给的信息不够,你的代码是运行到哪一步出错,单步调一下。如果是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之类的方法。 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; } ……}应该一样的吧,但是怎么还是不行啊,还是出现这样的错误。 即如果用户选中该字段为显示时,运行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"]; 谢谢秋枫,我再调试一下,看看问题到底出在什么地方。另外,MappingType.Hidden方法我用过,但是由于用户先看到完整的表的记录,再根据自己的需要去隐藏对该用户无关紧要的字段,因此操作对象为DataGrid,而不是DataSource,如果去操作DataSource就非常麻烦-------哦,可能也行,我以前的方法可能思路不对,我再去试试~~~但是希望对上面那个问题能找到错误的所在…… 数据写入报CS1519错误 文件读取 一个简单的正则表达式 关于泛型,请高手过来看看。 C#使用FileStream.read的导致溢出的问题 WinXP/Win2003环境中VS.Net2003与VS2005不能共存? 对临时事件和状态事件怎么建立用例? 随机抽取试题 并把他们显示到一个控件上怎么做啊 请问怎么更改主机名和ip地址 C#开发WEB,如何实现Excel内嵌在Web中?(高手,高手看过来) 求x的y次方,用哪个函数? ThisApplication.Documents.Open()的参数问题
dgts.MappingName="loanInfo";
dgts.GridColumnStyles["loanInfoNumber"]=0;
----------------------
你没有添加GridColumnStyle吧
吗?
if(dataGrid_query != null){//to do}
·需要你添加GridColumnStyle,你可以设置隐藏
myGridColumnStyle.Width = 0;
·如果你根据条件显示需要的列,你只需要把向DataGridTableStyle中添加你需要的列,勿须再设置隐藏列
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;
}
……
}
赶快试试~~~
"我在主窗体中定义了全局变量DataGrid dataGrid_query=new DataGrid(),但是dataGird_query添加到窗体上是动态添加的,是这方面有问题吗?"C#中没有全局变量的概念。就是说不会有全局变量。
这样写的话,表示mainForm一定包含dataGrid_query了
如果是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之类的方法。
出现错误的代码是:
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;
}
……
}
应该一样的吧,但是怎么还是不行啊,还是出现这样的错误。
即如果用户选中该字段为显示时,运行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"];
另外,MappingType.Hidden方法我用过,但是由于用户先看到完整的表的记录,再根据自己的需要去隐藏对该用户无关紧要的字段,因此操作对象为DataGrid,而不是DataSource,如果去操作DataSource就非常麻烦-------哦,可能也行,我以前的方法可能思路不对,我再去试试~~~但是希望对上面那个问题能找到错误的所在……