0

GridView对每一行都有一个和编辑链接。我可以单击编辑并在单元格中填充数据,GridView并且可以更新GridView行并且数据库中的相应表也被更新。

我有一个保存按钮,on_click 会逐列读取每一行并执行一些操作。

GridView如果其中的所有单元格都填充了一些数据,则该函数可以正常工作。如果单元格中的单元格GridView为空,则会给出错误:输入字符串格式不正确。

我试过的代码是:

protected void SAVE_GRID_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView2.Rows)
        {
            string Loc = row.Cells[1].Text;

            string strg = "SELECT Location_Type FROM Quantity WHERE Locations='" + Loc + "'";
            SqlCommand com = new SqlCommand(strg, con);
            con.Open();
            SqlDataReader sdr = com.ExecuteReader();
            while (sdr.Read())
            {
                Loctype.Text = sdr[0].ToString().Trim();
            }
            con.Close();

            for (int i = 1; i < GridView2.Columns.Count; i++)
            {
                String header = GridView2.Columns[i].HeaderText;                   

                string str = "SELECT Profile_Type FROM Profile_Tooltip WHERE Profile_Name='"+header+"'";
                SqlCommand cmd = new SqlCommand(str,con);
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    profiletype.Text = dr[0].ToString().Trim();
                }
                con.Close();

                if (!string.IsNullOrEmpty(row.Cells[i + 1].Text.Trim()))
                {
                    int n = Convert.ToInt16(row.Cells[i + 1].Text);
                    //int n = int.Parse(row.Cells[i].Text);

                    for (int m = Asset_List.Items.Count - 1; m >= 0; m--)
                    {
                        Asset_List.Items.Remove(Asset_List.Items[m]);
                    }

                    for (int j = 1; j <= n; j++)
                    {
                        Asset_List.Items.Add(string.Concat(profiletype.Text, j));
                    }

                    for (int k = 0; k <= Asset_List.Items.Count - 1; k++)
                    {
                        com = new SqlCommand("INSERT INTO " + Label3.Text + " VALUES ('" + Loctype.Text + "','" + Loc + "','" + header + "','" + Asset_List.Items[k] + "')", con);
                        con.Open();
                        com.ExecuteNonQuery();
                        con.Close();
                    }
              }
           }
        }
        SqlCommand comd = new SqlCommand("SELECT * FROM " + Label3.Text + "", con);
        SqlDataAdapter da = new SqlDataAdapter(comd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

我想检查单元格是否为空,如果为空,我想递增到下一个单元格而不对空单元格执行任何操作。

请帮我解决这个问题。谢谢你。

4

2 回答 2

3

只需使用修剪和刺痛功能

 if (!string.IsNullOrEmpty(row.Cells[i].Text.Trim() ) ) 

你需要在这里检查

 int n = Convert.ToInt16(row.Cells[i + 1].Text); 

检查字符串是否可转换为整数或不使用框架的 parse 或 tryparse 方法

short n = 0;
if(Int16.TryParse(row.Cells[i + 1].Text,out n);)
{
  //perform function and user n here now
}
于 2012-09-03T05:47:41.640 回答
0

对我来说最突出的一行是这一行:

int n = Convert.ToInt16(row.Cells[i + 1].Text);

我通常使用这样的东西来避免异常:

int n = 0;  
bool didParse = Int16.TryParse(row.Cells[i + 1].Text, out n);
if (didParse)
{
  //add code here
}

您的错误可能是由于您的单元格文本为空甚至可能为空而引发的异常。

于 2012-09-03T05:55:22.807 回答