Не член windows.forms.datagrid при переходе на vb.net 2003 с 2008

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».

Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.


person ivandinglasan    schedule 21.03.2013    source источник
comment
Какую проблему вы видите в коде?   -  person Tim    schedule 21.03.2013
comment
он подчеркнут эти коды, и когда я указываю курсором, он говорит, что что-то вроде строк не является членом system.windows.forms.datagrid, я думаю, что этот код из более высокой платформы .net, такой как vb.net 2008   -  person ivandinglasan    schedule 21.03.2013
comment
DataGrid был заменен на DataGridView в версии 2.0 — DataGrid был оставлен для обратной совместимости. В DataGrid нет свойства Rows, которое я вижу в MSDN. Вы уверены, что этот код работал в 2008 году?   -  person Tim    schedule 21.03.2013
comment
Что такое grdFamily? Код перебирает строки в DataGrid1... все это довольно запутанно без дополнительного контекста.   -  person Tim    schedule 21.03.2013
comment
я думал, что, возможно, эти свойства не относятся к сетке данных. или vb.net2003 да... но теперь я использую vb.net 2003, мой друг сказал мне использовать этот код для вставки записей в sql grdFamily - это имя сетки данных   -  person ivandinglasan    schedule 21.03.2013
comment
Я думаю, вам нужно будет манипулировать базовым источником данных, а затем выполнить повторную привязку. Кажется, нет простого способа получить доступ к строкам в DataGrid.   -  person Tim    schedule 21.03.2013
comment
Можете ли вы предоставить мне пример кода? даже не весь код, просто некоторые идеи и плохо завершаются   -  person ivandinglasan    schedule 21.03.2013
comment
Вопрос: почему вы переходите на .NET 1.1? Я не могу придумать для этого никаких причин, потому что .NET 2.0 доступен для каждой ОС, кроме 1.1 (даже для Windows 98).   -  person Dai    schedule 21.03.2013
comment
Кстати, вы, похоже, используете код С#... (поэтому я обновил свой ответ), но у вас нет тега С#? Какой язык вы на самом деле используете?   -  person yu_ominae    schedule 21.03.2013
comment
@yu_ominae, я использую vb.net 2003 и менеджер предприятия sql server   -  person ivandinglasan    schedule 21.03.2013
comment
@ Дай, сэр, потому что vb.net 2003 - единственный .net, который моя компания предоставляет с лицензией на использование.   -  person ivandinglasan    schedule 21.03.2013
comment
@ivandinglasan Вы пробовали мой ответ? Это привело вас куда-нибудь? Я спрашиваю о языке, потому что квадратные скобки - это синтаксис C # и не будет компилироваться в VB.Net...   -  person yu_ominae    schedule 21.03.2013
comment
@yu_ominae, я не пробовал, сэр, так как вы сделали это, С#, извините. я использую vb.net 2003 оконные формы datagrid   -  person ivandinglasan    schedule 21.03.2013
comment
Я преобразовал его обратно в VB.Net, и я думаю, что теперь он должен работать. ближе к делу. VB.Net не будет использовать индексаторы [], поэтому ваш код никогда не скомпилируется. [] — это синтаксис C#, а VB.Net — ().   -  person yu_ominae    schedule 21.03.2013
comment
VS Express 2012 доступен бесплатно и должен делать то, что вы ищете.   -  person Dai    schedule 21.03.2013


Ответы (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()

Примечание. Я не знаю, какие у вас типы данных, поэтому я не могу выполнить приведение к соответствующему типу в этом примере.

ОБНОВИТЬ:

Только что понял, что ваш код написан на С#, а мой ответ был на VB.Net. Я обновил его до того, что считаю правильным синтаксисом С#.

ОБНОВЛЕНИЕ2:

Не уверен, используете ли вы С# или VB.NET, у вас, похоже, есть сочетание обоих, поэтому снова обновите ответ на VB.Net, чтобы отразить тег вашего вопроса.

ОБНОВЛЕНИЕ 3:

Хорошо, после некоторых исследований то, что вы пытаетесь сделать, кажется очень сложным для выполнения через сетку данных. Вы действительно должны получить VS2012 Express, как предложил @Dai в комментариях к вашему вопросу.

В любом случае, если вы настроены на выполнение ti в .NET 1.1, вам действительно следует получить DataTable, который вы используете для заполнения сетки данных, и пройтись по нему вместо этого, поскольку это НАМНОГО проще. Вы можете найти много источников в Интернете, которые расскажут вам, как это сделать.

Я действительно не могу предоставить вам больше помощи, чем это. И, честно говоря, я думаю, что это самый хороший ответ, который вы получите, если только у кого-то здесь нет устаревшего кода или он все еще помнит .Net 1.1 и не хочет переписать ваш код для вас.

person yu_ominae    schedule 21.03.2013
comment
здесь все еще есть ошибка. For i As Integer = 0 To DataGrid1.Rows.Count - 1, подчеркнутое в примечании «datagrid1.rows»: не является членом system.windows.forms.datagrid - person ivandinglasan; 21.03.2013
comment
Попробуй это сейчас. Поскольку свойства .Rows нет, я думаю, вам нужно использовать VisibleRowCount (возможно...) - person yu_ominae; 21.03.2013
comment
На самом деле я не думаю, что это сделает то, что вы хотите. Кажется, ОЧЕНЬ сложно пройти через сетку данных. Взгляните на эту ссылку c-sharpcorner.com/UploadFile/sailaja1/ например. Кажется, все рекомендуют вместо этого получить источник данных сетки данных и пройтись по нему. - person yu_ominae; 21.03.2013
comment
Честно говоря, это может быть связано с чем угодно. Я бы посоветовал вам вставить точку останова непосредственно перед выполнением команды и просмотреть все параметры, чтобы убедиться, что ни один из них не равен нулю. Поскольку это отличается от вашего первоначального вопроса о DataGrid, я настоятельно рекомендую вам открыть новый вопрос. Таким образом, вы привлечете гораздо больше внимания, чем если будете отмечать вещи на старом вопросе. - person yu_ominae; 21.03.2013