检查并在GridView中显示错误

时间:2011-09-05 04:06:33

标签: c# asp.net gridview csv

我有这个代码:

    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中有空字段,则会显示“No value entered”,但这仅适用于列[1]到列[7]。如果我上传csv文件的列[8]和列[0]不包含任何值,调试器将停止,因为有错误。我该如何避免这种情况?请帮忙!

1 个答案:

答案 0 :(得分: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]) });

更新:扩大我的回答以回答第二个问题。

将您的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!";
 }

并且还将var data ... part更改为此(注意我如何将列[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”(就像我做的那样)上面),错误消息将说“错误:值必须是整数”;

请注意,我从ErrorMessage方法中删除了行BtnImport1.Visible = false;,因为每次调用ErrorMessage时,只需要执行一次就会执行该行一次。所以,将那条线移到其他地方。