【问题标题】:loop through DataTable while Changing the values in parameters Asp.net在更改参数 Asp.net 中的值时循环遍历 DataTable
【发布时间】:2013-11-26 14:18:44
【问题描述】:

在我的应用程序中,我想创建生成 JSON 数据的 web 服务,但我的问题是它是第一次生成 JSON 数据,但是当我在参数中更改存储过程的值时,它不会从 DataRow 循环。

这是我的代码

<WebMethod(EnableSession:=True)> _
    Public Shared Function Select_Search(ByVal MAKE As String, ByVal COLOR As String, ByVal CATAGORY As String, ByVal MODEL As String, ByVal TRANSMISSION As String, ByVal FUAL_TYPE As String, ByVal DRIVE As String, ByVal CHASSIS_NO As String) As SearchParameters()
        Dim ListbyClass As New List(Of SearchParameters)()
        Dim datatable As New DataTable()
        Dim myStock As New dsStockTableAdapters.newSTOCK_LISTTableAdapter()

        datatable = myStock.GetData(MAKE, "0", "0", "0", "0", DisplayType, "", "", "", "Any", "", "", "", "", "", 0, "", "", 0, "")

        Try
            'here when i change the above parameters value then looping is not working
            For Each rdr As DataRow In datatable.Rows

                Dim SRCH As New SearchParameters()
                SRCH.CHASSIS_NO = rdr("CHASSIS_NO").ToString()
                SRCH.MODEL = rdr("MODEL").ToString()
                SRCH.color = rdr("color").ToString()
                SRCH.TRANSMISSION = rdr("TRANSMISSION").ToString()
                SRCH.DOOR = rdr("DOOR").ToString()
                SRCH.MAKE = rdr("MAKE").ToString()
                SRCH.Image1 = rdr("Image1").ToString()
                SRCH.MODEL_DESCRIPTION = rdr("MODEL_DESCRIPTION").ToString()
                ListbyClass.Add(SRCH)

            Next
        Catch
        End Try

        Return ListbyClass.ToArray()

    End Function

现在,例如,当我将 0 传递给 MAKE 参数时,正在生成 JSON,因为 foreach 循环将在 datatable.Rows 中工作,但是当我将 MAKE 值更改为 23 之类的东西时,它不会循环遍历 DataTalbe Rows,而 JSON 将不会生成

这是我的 Ajax 方法脚本,我使用 jQuery 将值传递给参数。

<script type="text/javascript">

        function StockList() {
            $("#update").empty();
            var make = $('#<%= ddlMake.ClientID %>').val();
            var color = $('#<%= ddlColor.ClientID %>').val();
            var catagory = $('#<%= ddlCat.ClientID %>').val();
            var model = $('#<%= ddlMakeModel.ClientID %>').val();
            var transmission = $('#<%= ddltransmission.ClientID%>').val();
            var fual_type = $('#<%= rdfuelType.ClientID%>').val();
            var drive = $('#<%= ddldrive.ClientID %>').val();    
            var chassis_no = $('#<%= txtChassis_No.ClientID %>').val();

            var data = { MAKE: make, COLOR: color, CATAGORY: catagory, MODEL: model, TRANSMISSION: transmission, FUAL_TYPE: fual_type, DRIVE: drive, CHASSIS_NO: chassis_no }
            var jsonData = JSON.stringify(data);

            $.ajax({
                type: "POST",
                url: "stocklist.aspx/Select_Search",
                data: jsonData,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data) {
                    console.log(data);

                    var j = 1;
                    var count = 9;

                    for (var i = 0; i < data.d.length; i++) {
                        var output = '<ul class="selection page-' + (i == count || (i && !(i % 9)) ? j++ : j) + '">';
                        output += '<li >';
                        output += '<table><tr>';
                        output += '<td><img src="http://localhost:37245/NewPeaceAuto - Steer_Well/WebStock_Images/' + data.d[i].Image1 + '" alt=""/></td>';
                        output += '<td>CHASSIS NO:</td><td>' + data.d[i].CHASSIS_NO + '</td>';
                        output += '<td>MODEL:</td><td>' + data.d[i].MODEL + '</td>';
                        output += '<td>COLOR:</td><td>' + data.d[i].color + '</td>';
                        output += '<td>TRANS:</td><td>' + data.d[i].TRANSMISSION + '</td>';
                        output += '<td>DOOR:</td><td>' + data.d[i].DOOR + '</td>';
                        output += '<td>MAKE:</td><td>' + data.d[i].MAKE + '</td>';
                        output += '</tr></table></li></ul>';
                        $("#update").append(output);
                        count = count + 9;
                    }

                }
            });
        }
</script>

如何循环抛出DataTable,无论哪些值将在参数中传递,如下所示

                             22     5        3       11       2
datatable = myStock.GetData(MAKE, MODEL, CATAGORY, COLOR, FUAL_TYPE .....)

【问题讨论】:

  • 第一个问题:你确定你传入的参数导致返回数据吗?如果没有返回数据,则不会出现任何循环行为。
  • 是的,我确信它正在返回数据,但是当我更改参数中的值(这些值也在数据库中)时,它不会循环遍历 DataRow
  • 我应该问:是 WebMethod 循环不起作用,还是 JavaScript 中 Success 函数的循环?
  • its a webmethod looping which is not working while changing the values in parameters but its 当我 paas 0 而不是 MAKE 值时循环,此值“0”将来自下拉列表选择值或手动

标签: asp.net ajax vb.net c#-4.0


【解决方案1】:

我注意到您有一个空的 Catch 声明。如果您知道这一行:

datatable = myStock.GetData(MAKE, "0", "0", "0", "0", DisplayType, "", "", "", "Any", "", "", "", "", "", 0, "", "", 0, "")

...当MAKE 为“23”时返回数据-datatable 将包含记录-然后我怀疑可能发生的是Try 块中的某些内容导致错误。因为你有一个空的Catch 语句,你不知道那个错误是什么,代码继续。

尝试从代码周围删除Try .. Catch .. End Try 代码,或者在Catch 块中添加一些内容,以便在您遇到错误时告诉您。

ETA:如果没有出现错误,那么最有可能的是您的表 datatable 有 0 行。快速查找方法:在 For Each 之前添加以下行:

 System.Diagnostics.Debug.Assert(datatable.Rows.Count > 0);

运行你的代码(在调试模式下,否则什么都不会发生),看看你是否得到一个消息框,表明断言不正确。

【讨论】:

  • 我已经检查过了,它也没有在 Catch 块中给出异常。我不知道为什么当参数值被更改时,它没有循环通过 DataRow
  • 感染我现在已经删除了 try catch 块
  • 我在回答中添加了另一个建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多