2011-09-05 18 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