2016-08-31 29 views
0

私は自分のWebサイトで3層アーキテクチャを使用しています。グリッドビューで更新するのではなく、グリッドビューの行の値を他のページに送信し、そこに更新情報を追加したいと思います。 ビューページのリンクコードは次のとおりです。'Object'を暗黙的に 'System.Data.DataTable'に変換できません。

<asp:TemplateField> 
      <ItemTemplate> 
       <a href ='<%#"UpdateCategory.aspx?CategoryID="+DataBinder.Eval(Container.DataItem,"CategoryID") %>'> <%#Eval("CategoryName") %> </a> 
      </ItemTemplate> 
     </asp:TemplateField> 

更新]ページでPageLoadイベント:

protected void Page_Load(object sender, EventArgs e) 
    { 
     int categoryId = 0; 
     categoryId = Convert.ToInt32(Request.QueryString["CategoryID"]); 
     CategoryBL.GetCategoryByID(categoryId); 
    } 

CategoryBLコード:CategoryBLページでカテゴリを戻しながら

public static DataTable GetCategoryByID(int categoryID) 
    { 
     Category category = new Category(); 

     string query = "SELECT * FROM [Categories] WHERE [CategoryID] = @CategoryID"; 
     SqlCommand cmd = new SqlCommand(query); 
     cmd.Parameters.AddWithValue("@CategoryID", SqlDbType.Text).Value = categoryID; 

     DataTable dt = DbUtility.GetRecordsInDataTable(cmd); 
     if (dt.Rows.Count > 0) 
     { 
      category.CategoryID = Convert.ToInt32(dt.Rows[0]["CategoryID"]); 
      category.CategoryName = dt.Rows[0]["CategoryName"].ToString(); 
      category.Description = dt.Rows[0]["Description"].ToString(); 

      return category; 
//Cannot implicitly convert type 'Object' to 'System.Data.DataTable' 
     } 
     else 
     { 
      return null; 
     } 
    } 

が言及したエラーの上に取得しています。ここでは、選択したカテゴリを更新ページに表示したいと思います。

GetRecordsInDataTableコード:

public static DataTable GetRecordsInDataTable(SqlCommand cmd) 
    { 
     DataTable dt = new DataTable(); 

     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = GetConStr(); 

     SqlDataAdapter adapter = new SqlDataAdapter(); 
     adapter.SelectCommand = cmd; 

     try 
     { 
      con.Open(); 
      adapter.SelectCommand.Connection = con; 
      adapter.Fill(dt); 

      return dt; 
     } 
     catch (Exception ex) 
     { 

      //Logger.Log(ex); 
      throw ex; 
     } 


    } 

更新ページ:

 <asp:Label ID="Label1" runat="server" Text="Category Name"></asp:Label> 
     <asp:TextBox ID="CategoryNameTextBox" runat="server"></asp:TextBox> 
     <br /> 
     <br /> 

    <asp:Label ID="Label3" runat="server" Text="Description"></asp:Label> 
     <asp:TextBox ID="DescriptionTextBox" runat="server"></asp:TextBox> 
     <br /> 
     <br /> 

誰もこれで私を助けることができますか?

+0

'CategoryBL.GetCategoryByID(categoryId);'は何をしますか?戻り値は何にも割り当てられません。 'DbUtility.GetRecordsInDataTable'のコードは何ですか?投稿されたコードに基づいて、エラーは 'DbUtility.GetRecordsInDataTable'で発生しています。 – Tim

+1

'CategoryBL.GetCategoryByID'に' Category'を返していますが、指定された戻り値の型は 'DataTable'です。署名を 'public static Category GetCategoryByID(int categoryID);に変更してみてください。 – Tim

+0

@ティム、私は変わった。しかし、私はこれらの値を更新ページに表示できません。フィールドはnullです。私がデバッグすると、値が転送されているのがわかりました。 – Orion

答えて

0

関数は、DataTableオブジェクトが戻るのを待っていますが、代わりにカテゴリオブジェクトを返します。エラーの問題を解決するには、いずれかを選択する必要があります。関数型をカテゴリに変更するか、代わりにdtを返すように選択します。

この選択は、Page_Load関数の処理によって異なります。あなたのコードは何もしていません。オブジェクトを作成するだけですが、どこにも割り当てません。更新ページの結果をどのように扱うか決めてください。

+0

私は各フィールドのテキストボックスを追加した更新ページで、選択したグリッドビュー行を表示したいだけです。上に掲示された問題のテキストボックスを見ることができます。どうすればデータバインドできますか? – Orion

+0

私はこのページがまさにあなたが探しているものだと思うhttp://www.tutorialspoint.com/asp.net/asp.net_data_binding.htm。 Declarative Data Bindingセクションの手順(1)、(2)、(3)を参照してください。 – jambonick

関連する問題