3

チェックボックス付きのグリッドビューにストアドプロシージャの結果を表示する必要があります。しかし、接続文字列がdllとして組み込まれている既存のポータルで作業しているため、結果セットがグリッドビューにバインドされていません。これが私のコードです。

protected void Go_Rgn_Click(object sender, EventArgs e)
{
    SecurityController SC = new SecurityController();
    plhTable.Visible = true;
    plhChoose.Visible = false;
    plhForm.Visible = false;
    string Rgn = afRgn.Text;
    DataTable dt = new DataTable();

    dt=SC.BindGridView(Rgn);
    if (dt.Rows.Count > 0)
    {
        gvAll.DataSource = dt;
        gvAll.DataBind();
    }
}

コンパイラは次のようなエラーをスローします

タイプvoidをSystem.Data.DataTableに変換できません

これについて教えてください。

DataAccessレイヤー:

public DataTable BindGridView(string rgn)
{
    string spdName = "spd_get_default_region";
    DbCommand cmd = DB.GetStoredProcCommand(spdName);
    DB.AddInParameter(cmd, "Rgn", DbType.String, rgn);
    return  DB.ExecuteNonQuery(cmd);
}
4

1 に答える 1

2

期待される出力がデータテーブルである場合、voidを返そうとしています。

エラーは次の行にあります。

return  m_WorkoutPortal_DB.ExecuteNonQuery(cmd);

ExecuteNonQueryはデータテーブルを返しません

編集:

public DataTable BindGridView(string rgn)
{
    string spdName = "spd_get_default_region";

    DbCommand cmd = m_WorkoutPortal_DB.GetStoredProcCommand(spdName);
    m_WorkoutPortal_DB.AddInParameter(cmd, "Rgn", DbType.String, rgn);

    SqlDataAdapter da = new SqlDataAdapter(cmd); // Create a SQL Data Adapter and assign it the cmd value. 

    DataTable dt = new DataTable(); // Create a new Data table
    da.Fill(dt); // Fill the data table with the results from the query

    return dt; // return the data table
 }


protected void Go_Rgn_Click(object sender, EventArgs e)
{
  SecurityController SC = new SecurityController();
  plhTable.Visible = true;
  plhChoose.Visible = false;
  plhForm.Visible = false;
  string Rgn = afRgn.Text;

  gvAll.DataSource = SC.BindGridView(Rgn);
  gvAll.DataBind();
}
于 2012-05-24T10:53:08.217 に答える