【问题标题】:Load grid data from data base to gridview without using Binding method不使用Binding方法将网格数据从数据库加载到gridview
【发布时间】:2013-05-01 04:58:22
【问题描述】:

我正在尝试从 mssql 服务器数据库中获取信息并希望将其显示在 gridview 上。但问题是我在运行它时遇到了一个错误,因为 Index 超出了范围。必须是非负数且小于集合的大小。 参数名称:index,我的代码是

    img_green = ("~\Icons\" & "circle_green.ico")
    img_orange = ("~\Icons\" & "circle_orange.ico")
    img_red = ("~\Icons\" & "circle_red.ico")

    GridView1.AllowPaging = True
    GridView1.PageSize = 10
    cmd = New SqlCommand("SELECT  a.curr_datetime, a.site_id, b.site_name, a.dc_volt, a.curr_temp, a.eb_val, a.dc_low, a.hrt_temp, a.curr_dfs, a.curr_dft, a.curr_llop, a.curr_dgonl, a.fa_alarm, a.door_open, a.curr_spare FROM final_test a INNER JOIN site_details b ON a.site_id = b.site_id;", conn)

    If conn.State = ConnectionState.Closed Then
        conn.Open()
    End If

    da.SelectCommand = cmd
    da.Fill(ds, "final_test")
    dt = ds.Tables("final_test")

    dr = cmd.ExecuteReader

    If dr.Read() Then

        GridView1.Rows(index_flag).Cells(0).Text = ds.Tables(0).Rows(0).Item("curr_datetime").ToString


        lcl_ebval = ds.Tables(0).Rows(0).Item("eb_val").ToString
        If lcl_ebval = 0 Then
            eb_img = img_green
        ElseIf lcl_ebval = 1 Then
            eb_img = img_red
        End If
        GridView1.Rows(index_flag).Cells(5).Text = ds.Tables(0).Rows(0).Item("eb_img").ToString


        lcl_dclow = ds.Tables(0).Rows(0).Item("dc_low").ToString
        If lcl_dclow = 0 Then
            dclow_img = img_green
        ElseIf lcl_dclow = 1 Then
            dclow_img = img_red
        End If
        GridView1.Rows(index_flag).Cells(6).Text = ds.Tables(0).Rows(0).Item("dclow_img").ToString

        lcl_hrt = ds.Tables(0).Rows(0).Item("hrt_temp").ToString
        If lcl_hrt = 0 Then
            hrt_img = img_green
        ElseIf lcl_hrt = 1 Then
            hrt_img = img_red
        End If
        GridView1.Rows(index_flag).Cells(7).Text = ds.Tables(0).Rows(0).Item("hrt_img").ToString

        lcl_dfs = ds.Tables(0).Rows(0).Item("curr_dfs").ToString
        If lcl_dfs = 0 Then
            dfs_img = img_green
        ElseIf lcl_dfs = 1 Then
            dfs_img = img_red
        End If
        GridView1.Rows(index_flag).Cells(8).Text = ds.Tables(0).Rows(0).Item("dfs_img").ToString

        lcl_dft = ds.Tables(0).Rows(0).Item("curr_dft").ToString
        If lcl_dft = 0 Then
            dft_img = img_green
        Else
            dft_img = img_orange
        End If
        GridView1.Rows(index_flag).Cells(9).Text =    ds.Tables(0).Rows(0).Item("dft_img").ToString


        index_flag = index_flag + 1

【问题讨论】:

    标签: asp.net vb.net sql-server-2008


    【解决方案1】:

    我可以看到您通过将每行的单元格设置为您从 datareader 获得的值来手动填充 GridView。

    但实际上,您可以简单地填充网格:

    GridView1.DataSource = dt
    GridView1.DataBind()
    

    【讨论】:

    • 这个方法我已经查过了。假设我在数据库中有 10 行。但如果 dr.rows 或 dr.read() 只运行一次并简单地在屏幕上显示结果。但我希望如果我在数据库中有 10 行,那么循环必须运行 10 次,因为基于每行值我必须在 gridview 中显示带有数据的图像.....
    • 可以在grid的itemDataBound事件中设置图片
    • 同样的问题。指数超出范围。必须包含非负值
    • 你必须检查If ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
    【解决方案2】:

    我认为你让这件事变得比你必须做的更困难。将整个数据读入表格,绑定数据,然后使用 OnRowDataBound 事件修改图片。

    另一种方法是创建一个字段,然后填写并让 gridview 显示该图像名称。因此,您在绑定之前浏览所有记录,将一些字段设置为您要使用的图像的名称,然后将其绑定。

    我还注意到 - 在一行中说:

    GridView1.Rows(index_flag).Cells(5).Text = ds.Tables(0).Rows(0).Item("eb_img").ToString
    

    实际上是否有一个名为 eb_img 的字段?您在上面的行中设置了一个局部变量调用 eb_img,然后尝试从表中读取它。您不想将文本设置为变量 eb_img 而不是表格列吗?

    这只会设置文本,实际上不会显示图像。如果您想自己构建单元格,您需要定义一个图像类型的控件并将图像位置设置为 eb_img。

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 2013-07-25
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多