【问题标题】:Return count and data as json into extjs grid将计数和数据作为 json 返回到 extjs 网格中
【发布时间】:2012-09-26 19:03:00
【问题描述】:

如何返回两个Json 对象?基本上我正在尝试从 sql db 发送一堆数据以及 db 中的行数。

下面的代码成功发送myData,但现在我还要发送count

string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable";
conn.Open();
SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);
SqlCommand comd = new SqlCommand(sqlquery, conn);
DataSet myData = new DataSet();
cmd.Fill(myData, "myTable");


comd.CommandText = "SELECT COUNT(*) FROM myTable";
Int32 count = (Int32)comd.ExecuteScalar();

comd.ExecuteNonQuery();
conn.Close();

return JsonConvert.SerializeObject(myData, Formatting.Indented,
                        new JsonSerializerSettings
                        {
                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                        });

这是我的网格

this.grid = Ext.create('Ext.grid.Panel', {
        title: 'GridView App',
        frame: true,
        trackMouseOver: true,
        disableSelection: true,
        autoHeight: true,
        store: store,
        loadMask: true,
        columns: [

        { header: 'Q1',
            sortable: true, dataIndex: 'Q1'
        },
        { header: 'Q2',
            sortable: true, dataIndex: 'Q2'
        },
        { header: 'Q3',
            sortable: true, dataIndex: 'Q3'
        },
        { header: 'Q4',
            sortable: true, dataIndex: 'Q4'
        },
        { header: 'Improvements', flex: 1,
            sortable: true, dataIndex: 'Improvements'
        },
        { header: 'Comments', flex: 1,
            sortable: true, dataIndex: 'Comments'
        }
    ],

这是我的商店...

var store = Ext.create('Ext.data.JsonStore', {

        storeId: 'myData',
        scope: this,
        pagesize: itemsPerPage,
        remoteSort: true,
        fields: [
    { name: 'Q1', type: 'int' },
    { name: 'Q2', type: 'int' },
    { name: 'Q3', type: 'int' },
    { name: 'Q4', type: 'int' },
    { name: 'Q5', type: 'int' },
    { name: 'Improvements', type: 'string' },
    { name: 'Comments', type: 'string' }
    ],

        sorters: [
        {
            property: 'Q1',
            direct: 'ASC'
        }
     ],

        proxy: {
            type: 'ajax',
            scope: this,
            url: 'GridView/writeRecord',
            reader: {
                type: 'json',
                root: 'myTable',
                totalProperty: 'count'
            }
        }

    });

【问题讨论】:

  • 等等,你是在控制器上这样做的吗?我通常通过 Json 从控制器返回一个列表到视图,我只需键入 return Json(theList)。我猜它正在将数据集重新转换为 json,但可能您需要在返回中挖掘以从数据库中查找数据,因为它比简单的通用列表更复杂(更多层)
  • 嗨 Edwin...我正在使用 json.net 序列化...我有一个使用此控制器的 extjs gridview...这是原始帖子...stackoverflow.com/questions/12587799/….. . 是的,它正在将我的数据集作为 json 返回......但我肯定想试试你的建议......你能解释一下我是如何去做的吗

标签: c# sql asp.net-mvc count json


【解决方案1】:

这基本上是我在 ASP.NET 应用程序中的做法,我也在使用 JSON.NET:

string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable";
conn.Open();
SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);
SqlCommand comd = new SqlCommand(sqlquery, conn);
DataSet myData = new DataSet();
cmd.Fill(myData, "myTable");


comd.CommandText = "SELECT COUNT(*) FROM pid_FluSurvey";
Int32 count = (Int32)comd.ExecuteScalar();

comd.ExecuteNonQuery();
conn.Close();

return JsonConvert.SerializeObject( new { myTable = myData.Tables[0], count = count }, Formatting.Indented,
    new JsonSerializerSettings
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
    });

这里重要的是,您可以在任何匿名类型上调用 SerializeObject,并在其中放置您想要/需要的任意数量的属性。

【讨论】:

  • 感谢您的回答 VoidMain...我在 Json 中获得了两个值,但现在它创建了另一个列标题(它创建了一个层)i46.tinypic.com/14t5x0z.jpg...所以我的读者无法访问“myTable”...有解决办法吗?
  • 我还用我的 store 和 grid 方法更新了我的原始帖子,您可以在其中看到我如何从 Json 中提取数据
【解决方案2】:

这就是我的做法,我将它用于我所有的 mvc 应用程序。我在互联网上找到了这个例子(我稍微改了一下),因为我在办公室,在这里只使用网络表单(我知道......这很糟糕,当你使用 mvc 时你永远不会回去)

public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
    }


public class HomeController : Controller
    {

        public List<Person> personList = new List<Person>{ 
                                                        new Person{ Name="Jpnh", Surname="Coco"},
                                                        new Person{ Name="Mike", Surname="Nile"}  
                                                      };

        public ActionResult Index()
        {
            return View();
        }



        public ActionResult GetData()
        {

            return Json(personList);
        }

}

 <script type="text/javascript" language="javascript">

        $(document).ready(function () {

            $('#button').click(GetValue);

        });

        function GetValue() {
            $.ajax({
                url: "/Home/GetData",
                success: function (data) {
                    alert(data[0].Name);
                }

            });

        };

    </script>

代码本身非常易于理解,我假设您从数据库中填写通用列表没有问题

告诉我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2013-08-26
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多