2011-09-05 58 views
0

错误,我有这样的代码:检查并显示在GridView控件

private string ErrorMessage(string input) 
    { 
     { 
      if (!string.IsNullOrEmpty(input)) 
       return input; 
      BtnImport1.Visible = false; 
     } 
     return "No value entered!"; 

    } 

    protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     string strFileNameOnServer = fileUpload.PostedFile.FileName; 
     string fileExt = 
     System.IO.Path.GetExtension(fileUpload.FileName); 

     if (fileUpload.PostedFile != null && fileExt == ".csv") 
     { 
      try 
      { 
       fileUpload.PostedFile.SaveAs(Server.MapPath("~/Uploads")); 
       Label1.Text = "File name: " + 
         fileUpload.PostedFile.FileName + "<br>" + 
         fileUpload.PostedFile.ContentLength + " kb<br>" + 
         "Content type: " + 
         fileUpload.PostedFile.ContentType; 
      } 
      catch (Exception ex) 
      { 
       Label1.Text = "Error saving <b>" + strFileNameOnServer + "</b><br>. " + ex.Message; 
      } 
      BtnImport1.Visible = true; 
      Cancel.Visible = true; 
      fileUpload.Visible = false; 
      btnUpload.Visible = false; 
     } 
     else 
     { 

      Label1.Text = "Error - a file name must be specified/only csv files are allowed"; 
      return; 

     } 

     var data = File.ReadAllLines(Server.MapPath("~/Uploads")) 
      .Select(line => line.Split(',')) 
      .Select(columns => new { GuestID = ErrorMessage(columns[0]), IC_No = ErrorMessage(columns[1]), Grouping = ErrorMessage(columns[2]), Remarks = ErrorMessage(columns[3]), GuestName = ErrorMessage(columns[4]), Class_Group = ErrorMessage(columns[5]), Staff = ErrorMessage(columns[6]), Attendance_Parents_Only = ErrorMessage(columns[7]), Registration = ErrorMessage(columns[8]) }); 

     myGridView.DataSource = data; 
     myGridView.DataBind(); 

    } 

目前,如果在GridView的空字段,则显示“无输入值”,但是,这只是列[1 ]列[7]。如果我要上载包含无值的列[8]和列[0]的csv文件,则调试器会因出现错误而停止。我如何避免这种情况?请帮忙!

+0

ErrorMessage方法的作用是什么?它的参数是什么?它返回什么? – Icarus

+0

调试器向您显示的错误是什么? – Tim

+0

@Icarus - ErrorMessage方法显示在OP代码的开头。 – Tim

回答

0

改变这一行:

var data = File.ReadAllLines(Server.MapPath("~/Uploads")) 
       .Select(line => line.Split(',')) 
       .Select(columns => new { GuestID = ErrorMessage(columns[0]), IC_No = ErrorMessage(columns[1]), Grouping = ErrorMessage(columns[2]), Remarks = ErrorMessage(columns[3]), GuestName = ErrorMessage(columns[4]), Class_Group = ErrorMessage(columns[5]), Staff = ErrorMessage(columns[6]), Attendance_Parents_Only = ErrorMessage(columns[7]), Registration = ErrorMessage(columns[8]) }); 

要这样:

var data = File.ReadAllLines(Server.MapPath("~/Uploads")) 
      .Select(line => line.Split(',')) 
      .Select(columns => new { GuestID = ErrorMessage(columns.Length<=8?"":columns[0]), IC_No = ErrorMessage(columns[1]), Grouping = ErrorMessage(columns[2]), Remarks = ErrorMessage(columns[3]), GuestName = ErrorMessage(columns[4]), Class_Group = ErrorMessage(columns[5]), Staff = ErrorMessage(columns[6]), Attendance_Parents_Only = ErrorMessage(columns[7]), Registration = ErrorMessage(columns.Length<=8?"":columns[8]) }); 

UPDATE:扩大我的答案来回答第二个问题。

更改您的ErroMessage方法是:

private string ErrorMessage(string input, string dataTypeExpected="string") 
{ 

     switch (dataTypeExpected) 
     { 
      case "string": if (!string.IsNullOrEmpty(input)) 
          return input; 
          break; 
      case "int": 
        int result=-1; 
        if (int.TryParse(input, out result)) 
         return result.ToString(); 
        else return "Error: value must be an integer"; 

     }     

     return "No value entered!"; 
} 

,改变它的变种数据......部分,这一点(注意我是如何通过列[7] &列[8]的方法的ErrorMessage) :

var data = File.ReadAllLines(Server.MapPath("~/Uploads")) 
       .Select(line => line.Split(',')) 
       .Select(columns => new { GuestID = ErrorMessage(columns.Length<=8?"":columns[0]), IC_No = ErrorMessage(columns[1]), Grouping = ErrorMessage(columns[2]), Remarks = ErrorMessage(columns[3]), GuestName = ErrorMessage(columns[4]), Class_Group = ErrorMessage(columns[5]), Staff = ErrorMessage(columns[6]), Attendance_Parents_Only = ErrorMessage(columns[7],"int"), Registration = ErrorMessage(columns.Length<=8?"":columns[8],"int") }); 

说明:我重写了ErrorMessage函数以接收一个名为dataTypeExpected的额外可选参数(默认为“string”)。您可以使用该参数来指示输入参数应该在其中的数据类型。如果传入的数据是空字符串或不包含数字的字符串,并且您指定dataTypeExpected参数为“int”(如我所做的那样上面),错误信息会显示“Error:value must be an integer”;

请注意,我从ErrorMessage方法中删除了行BtnImport1.Visible = false;,因为当您只需要执行一次ErrorMessage时,每次调用ErrorMessage时都会执行一次该行。所以,把这条线移到别的地方。

+0

@lcarus,顺便说一句,我想问一下,我可以检查最后2列是否是整数,并显示错误,如果2列包含字符串,我可以做那?如果是这样,我该怎么做? – Mark20

+0

再次检查我的答案,@ Mark20 – Icarus

+0

@lcarus非常感谢,我会在我的项目中尝试:) – Mark20