【问题标题】:Not a member of windows.forms.datagrid when switching to vb.net 2003 from 2008从 2008 年切换到 vb.net 2003 时不是 windows.forms.datagrid 的成员
【发布时间】:2013-03-10 13:41:21
【问题描述】:
Dim sqlsyntax As String
        Dim result As String

        sqlsyntax = "INSERT INTO tblOfficeEquipmentProfile(OE_ID, OE_Category,OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo, OE_PropertyNo, OE_Static_IP, OE_Vendor, OE_PurchaseDate, OE_WarrantyInclusiveYear, OE_WarrantyStatus, OE_Status, OE_Dept_Code,OE_Location_Code,OE_Remarks)" _
                 & "VALUES(@OE_ID,@OE_Category,@OE_SubCategory,@OE_Name,@OE_User,@OE_Brand,@OE_Model,@OE_Specs,@OE_SerialNo,@OE_PropertyNo,@OE_Static_IP,@OE_Vendor,@OE_PurchaseDate,@OE_WarrantyInclusiveYear,@OE_WarrantyStatus,@OE_Status,@OE_Dept_Code,@OE_Location_Code,@OE_Remarks)"
        Dim adapter As SqlDataAdapter

        adapter.InsertCommand = New SqlCommand(sqlsyntax, sqlconn)

        adapter.InsertCommand.Parameters.Add("@OE_ID", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Category", SqlDbType.Char)
        adapter.InsertCommand.Parameters.Add("@OE_SubCategory", SqlDbType.Char)
        adapter.InsertCommand.Parameters.Add("@OE_Name", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_User", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Brand", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Model", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Specs", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_SerialNo", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_PropertyNo", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Static_IP", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Vendor", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_PurchaseDate", SqlDbType.SmallDateTime)
        adapter.InsertCommand.Parameters.Add("@OE_WarrantyInclusiveYear", SqlDbType.Int)
        adapter.InsertCommand.Parameters.Add("@OE_WarrantyStatus", SqlDbType.Char)
        adapter.InsertCommand.Parameters.Add("@OE_Status", SqlDbType.VarChar)
        adapter.InsertCommand.Parameters.Add("@OE_Dept_Code", SqlDbType.Char)
        adapter.InsertCommand.Parameters.Add("@OE_Location_Code", SqlDbType.Char)
        adapter.InsertCommand.Parameters.Add("@OE_Remarks", SqlDbType.VarChar)


        For i As Integer = 0 To DataGrid1.VisibleRowCount - 1
            'adapter.InsertCommand.Parameters(0).Value = Convert.ToInt32(txtEmpID.Text.Trim)
            adapter.InsertCommand.Parameters(0).Value = DataGrid1(i, 0).GetType
            adapter.InsertCommand.Parameters(1).Value = DataGrid1(i, 1).GetType
            adapter.InsertCommand.Parameters(2).Value = DataGrid1(i, 2).GetType
            adapter.InsertCommand.Parameters(3).Value = DataGrid1(i, 3).GetType
            adapter.InsertCommand.Parameters(4).Value = DataGrid1(i, 4).GetType
            adapter.InsertCommand.Parameters(5).Value = DataGrid1(i, 5).GetType
            adapter.InsertCommand.Parameters(6).Value = DataGrid1(i, 6).GetType
            adapter.InsertCommand.Parameters(7).Value = DataGrid1(i, 7).GetType
            adapter.InsertCommand.Parameters(8).Value = DataGrid1(i, 8).GetType
            adapter.InsertCommand.Parameters(9).Value = DataGrid1(i, 9).GetType
            adapter.InsertCommand.Parameters(10).Value = DataGrid1(i, 10).GetType
            adapter.InsertCommand.Parameters(11).Value = DataGrid1(i, 11).GetType
            adapter.InsertCommand.Parameters(12).Value = DataGrid1(i, 12).GetType
            adapter.InsertCommand.Parameters(13).Value = DataGrid1(i, 13).GetType
            adapter.InsertCommand.Parameters(14).Value = DataGrid1(i, 14).GetType
            adapter.InsertCommand.Parameters(15).Value = DataGrid1(i, 15).GetType
            adapter.InsertCommand.Parameters(16).Value = DataGrid1(i, 16).GetType
            adapter.InsertCommand.Parameters(17).Value = DataGrid1(i, 17).GetType
            adapter.InsertCommand.Parameters(18).Value = DataGrid1(i, 18).GetType

            result = adapter.InsertCommand.ExecuteNonQuery()
            MsgBox("success fully added")
            adapter.InsertCommand.Parameters.Clear()
        Next

先生,我将代码修改为以下 sql 数据,

但是这里返回错误

---->adapter.InsertCommand = New SqlCommand(sqlsyntax, sqlconn)

错误: EOEHR.exe 中发生了“System.NullReferenceException”类型的未处理异常

附加信息:对象引用未设置为对象的实例。

【问题讨论】:

  • 您在代码中看到的问题是什么?
  • 它在这些代码中有下划线,当我指向光标时,它说类似行的东西不是 system.windows.forms.datagrid 的成员,我认为这段代码来自更高的 .net 框架,如 vb .net 2008
  • DataGrid 在 2.0 中被 DataGridView 取代 - 保留 DataGrid 是为了向后兼容。我可以在 MSDN 上看到 DataGrid 中没有 Rows 属性。您确定此代码在 2008 年有效吗?
  • 问题:为什么要迁移到 .NET 1.1?我想不出任何理由,因为 .NET 2.0 可用于 1.1 的所有操作系统(甚至是 Windows 98)。
  • VS Express 2012 是免费提供的,应该可以满足您的需求。

标签: sql vb.net datagrid visual-studio-2003


【解决方案1】:

据我所知,DataGrid 通过索引MyDataGrid(RowIndex, ColumnIndex) 访问单元格,就像数组一样。这使您可以获取或设置指定单元格的值作为对象,然后您可能必须或可能不必将其转换为适当的类型。

.Row(Index) 不适用于此控件,.Column(Index) 也不适用,因为似乎没有为这些对象中的任何一个公开的集合。

您可以尝试将代码更改为:

For i As Integer = 0 To 'Get the table from the data source here and loop through that instead of just looping through the datagrid.
     adapter.InsertCommand.Parameters(0).Value = Convert.ToInt32(txtEmpID.Text.Trim)
     adapter.InsertCommand.Parameters(1).Value = grdFamily(i, 0).ToString()
     adapter.InsertCommand.Parameters(2).Value = grdFamily(i, 1).ToString()
     adapter.InsertCommand.Parameters(3).Value = grdFamily(i, 2).ToString()
     adapter.InsertCommand.Parameters(4).Value = grdFamily(i, 3).ToString()

     result = adapter.InsertCommand.ExecuteNonQuery()
     adapter.InsertCommand.Parameters.Clear()

请注意,我不知道您的数据类型是什么,因此我无法在此示例中转换为适当的类型。

更新:

刚刚意识到您的代码是在 C# 中,而我的答案是在 VB.Net 中,我更新为我认为正确的 C# 语法。

更新2:

不确定您使用的是 C# 还是 VB.NET,您似乎同时使用了两者,因此再次更新对 VB.Net 的回答以反映您的问题标签。

更新 3:

好的,在做了一些研究之后,通过数据网格来做你想做的事情似乎很复杂。你真的应该得到 VS2012 Express,正如 @Dai 在 cmets 中对你的问题所建议的那样。

无论如何,如果您打算在 .NET 1.1 中执行 ti,您应该真正掌握用于填充数据网格的 DataTable 并循环遍历它,因为它更简单。 您可以在互联网上找到许多资源,它们会告诉您如何做到这一点。

我真的无法为您提供比这更多的帮助了。老实说,我认为这是一个很好的答案,除非这里有人手头有一些遗留代码或仍然记得 .Net 1.1 并愿意为您重写代码。

【讨论】:

  • 这里仍然出错。对于 i As Integer = 0 To DataGrid1.Rows.Count - 1 在“datagrid1.rows”中下划线注意:不是 system.windows.forms.datagrid
  • 立即尝试。由于没有.Rows 属性,我认为你必须使用 VisibleRowCount (也许......)
  • 其实我不认为这会做你想要的。遍历数据网格似乎非常困难。例如,看看这个链接c-sharpcorner.com/UploadFile/sailaja1/…。似乎每个人都建议获取数据网格的数据源并循环遍历它。
  • 老实说,这可能是由于许多原因。我建议您在执行命令之前插入一个断点并查看所有参数以确保它们都不为空。由于这与您关于 DataGrid 的原始问题不同,我强烈建议您提出一个新问题。与在旧问题上标记内容相比,您将获得更多关注。
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多