请帮忙告诉我做错了什么?
//For Only visible Rows After Filtering
for(int i=0; i< DGScores.DataGridView.Rows.Count-1;i++)
{
Int32 M1Val=Convert.ToInt32(DGScores.DataGridView.Rows[i].Cells["M1Val"].Value);
Int32 ScoreType=Convert.ToInt32(DGScores.DataGridView.Rows[i].Cells["ScoreType"].Value);
string StudentCode=DGScores.DataGridView.Rows[i].Cells["StudentCode"].Value.ToString();
if(!Convert.IsDBNull(DGScores.DataGridView.Rows[i].Cells["M1Val"].Value))
{
if( ScoreType==2 && M1Val >=0 )
{
MessageBox.Show("نمره مستمر اول برای "+StudentCode);
}
}
}
答案 0 :(得分:1)
你可以这样做并避免dbnull错误
if(datarow["columnaname"] != DBNull.Value)
object.property = decimal.Parse(row["columnname"].ToString());
或创建使用多个地方的常用方法
public static T GetColumnValue<T>(string columnName, DataRow dr)
{
Type typeParameterType = typeof(T);
return dr[columnName] != DBNull.Value
? (T) Convert.ChangeType(dr[columnName] , typeParameterType)
: default(T);
}
像
一样使用它 obj.property = GetColumnValue<int>("column", datarow);
答案 1 :(得分:0)
避免这种错误的一种方法就是做你喜欢的事情。
Int32? M1Val = DGScores.DataGridView.Rows[i].Cells["M1Val"].Value == DBNull.Value ?
(Int32?)null : Convert.ToInt32(DGScores.DataGridView.Rows[i].Cells["M1Val"].Value);
如果它实际上是null,则将其设置为null;如果不是,则将其设置为数字。然后,您可以在输入消息框if statement
之前使用它来检查nullif(M1Val != null)
{
if( ScoreType==2 && M1Val >=0 )
{
MessageBox.Show("نمره مستمر اول برای "+StudentCode);
}
}
希望这有帮助。