c#的datatable数据传递和类似输出框的控件
在c#的winform程序中,类A,B,C,D.....分别在每一个文件中,都要用到一个DataTable数据。于是想把这个公共使用的DataTable的获取过程定义在C...
在c#的winform程序中,类A,B,C,D.....分别在每一个文件中,都要用到一个DataTable数据。 于是想把这个公共使用的DataTable的获取过程定义在Common类中,由其他类调用。可是在实际的使用过程中,发现定义在common类中的简单类型(如int,string等)被其他类调用时,可以得到common类中赋予的值。但定义在common类中的
DataTable数据被其他类调用时,却是空值。怎么回事啊。怎么解决DataTable数据在不同文件不同类之间的传递问题呢?
还有,类似VS开发环境中的的输出框是用什么控件做的啊,用richbox的话没有最大化最小化按钮,combox框啊,用窗体实现输出框的话怎么能嵌入到主窗体中呢?
还有结构体数组包含数组的问题:
public struct student
{
public int number;
public string name;
public int[] scores; //存放语数外三门课的成绩
}
student[] ClassOne = new student[50];
private void GetResult()
{
for (int i = 0;i<100;i++)
{
ClassOne[i].number = i;
ClassOne[i].name = "王" + i.ToString().PadLeft(2, '0');
for (int j = 0; j < 3; j++)
{
ClassOne[i].scores[i] = 80 + j + i%10;
}
}
}
直接这样写的话,ClassOne[i].scores[i]为null。若在结构体定义中写构造函数,ClassOne数组又该怎么定义呢,请指教,谢谢 展开
DataTable数据被其他类调用时,却是空值。怎么回事啊。怎么解决DataTable数据在不同文件不同类之间的传递问题呢?
还有,类似VS开发环境中的的输出框是用什么控件做的啊,用richbox的话没有最大化最小化按钮,combox框啊,用窗体实现输出框的话怎么能嵌入到主窗体中呢?
还有结构体数组包含数组的问题:
public struct student
{
public int number;
public string name;
public int[] scores; //存放语数外三门课的成绩
}
student[] ClassOne = new student[50];
private void GetResult()
{
for (int i = 0;i<100;i++)
{
ClassOne[i].number = i;
ClassOne[i].name = "王" + i.ToString().PadLeft(2, '0');
for (int j = 0; j < 3; j++)
{
ClassOne[i].scores[i] = 80 + j + i%10;
}
}
}
直接这样写的话,ClassOne[i].scores[i]为null。若在结构体定义中写构造函数,ClassOne数组又该怎么定义呢,请指教,谢谢 展开
2个回答
展开全部
你的GetResult()方法是用来初始化student数组的吗? 如果是修改的方法非常简单
for (int i = 0;i<100;i++) //这里i应该小于50 否则会数组越界
{
ClassOne[i].number = i;
ClassOne[i].name = "王" + i.ToString().PadLeft(2, '0');
ClassOne[i].scores = new int[3]; // 在这初始化一下这个int数组就可以了
for (int j = 0; j < 3; j++)
{
ClassOne[i].scores[i] = 80 + j + i%10; //这里的scores[i]应该改成scores[j],否则会出现数组越界。
}
}
建议不要一次性的生命这么大的数组 比较占内存 应该是每次初始化一个student对象,使用完了释放掉,在初始化下一个。
for (int i = 0;i<100;i++) //这里i应该小于50 否则会数组越界
{
ClassOne[i].number = i;
ClassOne[i].name = "王" + i.ToString().PadLeft(2, '0');
ClassOne[i].scores = new int[3]; // 在这初始化一下这个int数组就可以了
for (int j = 0; j < 3; j++)
{
ClassOne[i].scores[i] = 80 + j + i%10; //这里的scores[i]应该改成scores[j],否则会出现数组越界。
}
}
建议不要一次性的生命这么大的数组 比较占内存 应该是每次初始化一个student对象,使用完了释放掉,在初始化下一个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有这么蹊跷,代码方便发出来吗
追问
上面datatable的是我程序写错了,但输出框、属性框控件怎么做啊,还有结构体数组包含数组的问题:
public struct student
{
public int number;
public string name;
public int[] scores; //存放语数外三门课的成绩
}
student[] ClassOne = new student[50];
怎么在另一个方法中对ClassOne 赋值操作啊?应该在写构造函数,但ClassOne数组错
追答
public struct student
{
public student(int number, string name, params int[] scores)
{
this.number = number;
this.name = name;
this.scores = scores;
}
public int number;
public string name;
public int[] scores;
}
在 GetResult()所在的位置声明 ClassOne:
List ClassOne= new List();
专门定义一个函数初始化它,放在调用类所在的构造函数里:
private void InitClassOne()
{
for(...)
{
ClassOne.Add(new student(1,"Li",new int[]{40,60,80}));
}
}
下面的GetResult()就可以查询ClassOne中的内容了,注意不要写成for (int i = 0;i<100;i++)这样的遍历方法,显得很业余,数组都有长度范围,你在调用者这里指定了大小,以后增加删除了,你的代码又要出错了。用foreach或者带条件的for调用,加上i<ClassOne.Count
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询