2017-03-11 7 views
0

SQLデータベーステーブルをGridViewにバインドします。ここでは、HTTP POST動詞を使用して 'GetProducts'から 'url'というWebメソッドを呼び出すためにAjaxを使用しました。それは選択クエリを実行し、データを返します。ここにコードがありますが、 'p.ToArray()'にエラーが表示されます。暗黙的に変換できません。このコードを実行できるように助けてください。コードの他の部分に誤りがある: これは.aspx.csページ内のコードです:対処中にエラーが発生しました

ここ
namespace AvailableProductsWithAjax 
{ 
    public partial class AvailableProductsWebForm : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       this.BindDummyRow(); 
      } 

      // GridView1.Columns[0].Visible = false; 


     } 
     private void BindDummyRow() 
     { 
      DataTable dummy = new DataTable(); 
      //dummy.Columns.Add("Product_Id"); 
      dummy.Columns.Add("Product_Name"); 
      dummy.Columns.Add("Product_Description"); 
      dummy.Columns.Add("Product_Category"); 
      dummy.Columns.Add("Product_Price"); 
      dummy.Columns.Add("Product_Quantity"); 
      dummy.Rows.Add(); 
      GridView1.DataSource = dummy; 
      GridView1.DataBind(); 


     } 

     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 
     [WebMethod] 
     public static Products GetProducts() 
     { 
      List<Products> p = new List<Products>(); 
      string query = "Select Product_Name, Product_Description, Product_Category, Product_Price, Product_Quantity from Items"; 


      String cs = ConfigurationManager.ConnectionStrings["WebShopDB"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(cs)) 
      { 
       using (SqlDataAdapter sda = new SqlDataAdapter()) 
       { 
        SqlCommand cmd = new SqlCommand(); 
        sda.SelectCommand = cmd; 
        cmd.Connection = con; 
        cmd.CommandText = query; 

        DataTable dt = new DataTable(); 
        sda.Fill(dt); 

        foreach (DataRow dtRow in dt.Rows) 
        { 
         Products ps = new Products(); 

         ps.Products_Name = dtRow["Product_Name"].ToString(); 
         ps.Products_Category = dtRow["Product_Category"].ToString(); 
         ps.Products_Description = dtRow["Product_Description"].ToString(); 
         ps.Products_Price = dtRow["Product_Price"].ToString(); 
         ps.Products_Quantity = dtRow["Product_Quantity"].ToString(); 


        } 

       } 

      } 
      return p.ToArray(); 
      // Here is the error, cannot be converted implicitly 
     } 

      public class Products 

      public int Products_Id { get; set; } 
      public string Products_Name { get; set; } 
      public string Products_Description { get; set; } 

      public string Products_Category { get; set; } 
      public string Products_Price { get; set; } 
      public string Products_Quantity { get; set; } 
     } 
    } 
    } 

は、jQueryのAjaxの機能は次のとおりです。ここで

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $.ajax({ 
        type: "POST", 
        url: "AvailableProductsWebForm.aspx/GetProducts", 
        contentType: "application/json; charset=utf-8", 
        data: {}, 
        dataType: "json", 
        success: OnSuccess, 
        failure: function (data) { 
         alert(data.d +" Its a failure"); 
        }, 
        error: function (data) { 
         alert(data.d +" It's an error"); 
        } 
       }); 
      }); 
      function OnSuccess() { 
       $("#GridView1").empty(); 
       if(data.d.length>0) 
       { 
        $("#GridView1").append("<tr><th>Product_Name</th> <th>Product_Category</th> <th>Product_Description </th> <th>Product_Price</th> <th> Product_Quantity</th></tr>"); 
        for(var i=0; i<data.d.length; i++) 
        { 
         $("#GridView1").append("<tr><td>" + data.d[i].Product_Name +"</td> <td>" 
          + data.d[i].Product_Category + "</td> <td>" 
          + data.d[i].Product_Description + 
          data.d[i].Product_Price + "</td> <td>" + 
          data.d[i].Product_Quantity + "</td> <td>" 
         ); 
        } 
       } 
      } 
     </script> 

は私のデータベースクエリは次のとおりです。

USE [WebShop] 
GO 
CREATE TABLE [dbo].[Items](
    [Product_Id] [int] IDENTITY(1,1) NOT NULL, 
    [Product_Name] [varchar](50) NULL, 
    [Product_Description] [varchar](50) NULL, 
    [Product_Category] [varchar](50) NULL, 
    [Product_Price] [varchar](50) NULL, 
    [Product_Quantity] [varchar](50) NULL, 
GO 

このコードを実行するのを手伝ってください。

答えて

0

戻り値の型はProductsですが、返すのはList<Products>です。

public static List<Products> GetProducts() 


第二に、あなたのメソッドのシグネチャを変更 、あなたの戻り値を満たしていません。変数pは空のままです。
ですから、foreachループのpにPSを追加する必要があります

p.Add(ps); 
0

があなたの代わりに

ProductsだからあなたのコードがあるべきProducts[]でそれを返す必要があります

[WebMethod] 
    public static Products[] GetProducts() 
    { 
     List<Products> p = new List<Products>(); 
     string query = "Select Product_Name, Product_Description, Product_Category, Product_Price, Product_Quantity from Items"; 

私はより多くの援助あれば教えてください必要...

関連する問題