C# 当我将datatable传递给方法时,它将变为空
所以我有一个非常简单的函数,它遍历一个表,找到那些年龄列在2个数字之间的行,然后返回一个包含新行的新表。以下是我的功能:C# 当我将datatable传递给方法时,它将变为空,c#,methods,datatable,C#,Methods,Datatable,所以我有一个非常简单的函数,它遍历一个表,找到那些年龄列在2个数字之间的行,然后返回一个包含新行的新表。以下是我的功能: private DataTable AgeFinder(int MiniAge, int MaxiAge, DataTable x) { //AFWT : Analyze From Which Table int count; DataTable dtAge = new DataTable();
private DataTable AgeFinder(int MiniAge, int MaxiAge, DataTable x)
{
//AFWT : Analyze From Which Table
int count;
DataTable dtAge = new DataTable();
dtAge = x.Clone();
int ageMin = MiniAge;
int ageMax = MaxiAge;
if (ageMin > ageMax)
{
int temp = ageMax;
ageMax = ageMin;
ageMin = temp;
}
int ageDr;
count = 0;
ageDr = 0;
dataGridView1.DataSource = x;
foreach (DataRow dr in x.Rows)
{
ageDr = Convert.ToInt16(x.Rows[count]["age "]);
if (ageDr >= ageMin && ageDr < ageMax)
{
dtAge.Rows.Add(dr.ItemArray);
}
count++;
}
lblCountThisQuery.Text = dtAge.Rows.Count.ToString();
return dtAge;
}
现在我可以看到AT不是空的,但是当我检查x(方法中的表)时,它是空的!为什么会发生这种情况?不应该发生。完全是否有其他东西同时修改该变量?为了调试这个,您执行了哪些非常具体的步骤?现在我怀疑你在调试器中出错了。我没有调试它。我在这一行中不断得到一个错误
ageDr=Convert.ToInt16(x.Rows[count][“age”])代码>它说“对象不能从DBNull转换为其他类型”。在将datagridview传递给方法之前,我尝试从AT填充datagridview,我看到数据在其中,但当我尝试将x传递给datagridview时…它没有显示任何表示其为空的内容<代码>“我没有调试它”
-这是你的第一个错误。调试代码<代码>“'Object不能从DBNull强制转换为其他类型”-您误解了错误消息。显然,x
不是空的,否则会出现NullReferenceException
<代码>x有数据。表行/列中的数据为null
,您正试图将其转换为Int16
。Null不能转换为数字。调试代码。
dtAge = AgeFinder(Convert.ToInt16(tbxMinAge.Text), Convert.ToInt16(tbxMaxAge.Text), AT);
dataGridView1.DataSource = dtAge;