-2

你调用的对象是空的。

这是我尝试从网格视图中删除 .. 行时遇到的错误

这是在.. page_load

gvDetails.DataSource =myBl.DeleteAllCountry(int.Parse(gvDetails.SelectedRow.ToString()));

在数据访问层

   public DataTable DeleteCountry(int country_id)
    {
        DataTable dltcontry = new DataTable();
        SqlConnection con = new SqlConnection(@"Data Source=a8-pc\sqlexpress;Integrated Security=True");
        SqlDataAdapter da;
        try
        {
            SqlCommand cmd = new SqlCommand();
            cmd.connection= con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_DeleteCountry";
            con.Open();
            da = new SqlDataAdapter(cmd);
            cmd.Parameters.AddWithValue("country_id", @country_id);
            cmd.ExecuteNonQuery();
            da.Fill(dltcontry);
            con.Close();
        }

在业务层代码就像

  public DataTable DeleteAllCountry(int country_id)
  {
     return mydtLayer.DeleteCountry(country_id);
  }
4

1 回答 1

0

首先要更正,您需要设置与您的命令的连接

cmd.Connection =con;

或在构造函数中如下

 SqlCommand command = new SqlCommand(
            queryString, connection);

另一个问题是您尝试将 selected 转换gvDetails.SelectedRow为 int 值

gvDetails.selectedRows.Count在获得所选行的值之前检查

如果您有选择,则可以获取您的 country_id 列的单元格值,如下所示

 gvDetails.SelectedRow.cells("country_id").Text

现在您可以通过使用将其转换为 int 值int.TryParse,如果成功则发送到您的 BL 函数以删除记录

于 2013-06-11T05:28:31.647 回答