2011-01-14 3 views
1

Я могу сделать это легко с помощью адаптера таблицы, но я не могу использовать переменные в строке подключения адаптеров таблицы или указать строку подключения для использования перед «заполнением». Есть ли способ заполнить форму без использования каких-либо привязок?Как заполнить форму без использования адаптера таблицы

В настоящее время я использовал этот метод - форма поиска, которая заполняет поле со списком, а также на действия двойного щелчка у меня есть это:

Private Sub lstResults_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles lstResults.CellMouseDoubleClick 
    'Fills Main Form 
    Dim firstcellvalue As String = lstResults.Rows(e.RowIndex).Cells(0).Value.ToString() 
    frm_IMT.intPendingID = CInt(lstResults.Rows(e.RowIndex).Cells(0).Value.ToString()) 
    frm_IMT.Show() 

Затем, когда форма нагрузки:

меня. PendingTableAdapter.Fill (Me.Phone_memo_backendDataSet.Tables («Ожидание»), intPendingID)

ответ

2

Не могли бы вы быть более конкретными относительно того, что вы пытаетесь достичь? Когда вы говорите, что не можете использовать переменные для построения строки подключения, вы имеете в виду, чтобы подключиться к внутреннему и получить данные?

Поскольку я не уверен, что это вы пытаетесь сделать, я сделаю некоторые догадки. Он СМОТРЕТЬ, как будто вы пытаетесь заполнить какой-либо список (скажем, dataGridView) в одной форме.

Затем вы разрешаете пользователю выбирать элемент в dataGridview, дважды щелкнув по любой ячейке в строке, которая обеспечивает получение идентификатора основного ключа для записи в таблице, содержащей ожидающие телефонные заметки.

Этот идентификатор затем используется для заполнения таблицы адаптера всеми записями из таблицы «Ожидание», в которой есть PendingID. Как основной ключ (тем самым возвращающий одну запись) или внешний ключ (таким образом, возвращающий 0 во многие записи) ,

Поскольку мы не знаем, где ваши результаты должны быть в конечном итоге (Имеется ли в Адаптере таблицы одна запись или потенциально много?), Сложно ответить на ваш вопрос.

Лично я хотел бы написать функцию, которая возвращает DataTable, содержащую информацию, которую вы хотите заполнить своей формой. В этом примере функция возвращает dataTable, содержащую запись для каждого состояния вместе со связанными данными. Пусть эта функция, а затем, являются членами класса Названный «MyDataFactory»:

'Shared Keyword makes this function Available without instantiating the containing class: 
Public Shared Function StatesDataTable(ByVal StateID As Integer) As DataTable 

    'Set up your SQL Statement to execute against your back end: 
    Dim SQL As String = _ 
    "SELECT StateID, State, StateName, HUDStateID " & _ 
    "FROM tblState " & _ 
    "ORDER BY State" 

    'Initialize a DataTable: 
    Dim dt As New DataTable 

    'The Using Keyword is elegant in that it handles bothersome Disposal tasks 
    'for unmanaged objects such as Database Connections: 
    Using cn As New OleDb.OleDbConnection(My.Settings.CreateTHisConnection) 
     Using cmd As New OleDb.OleDbCommand(SQL, cn) 

      'Open the Connection: 
      cn.Open() 

      'Retreive the Data into a DataReader: 
      Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader 

      'Load the contents of the Reader into your datatable: 
      dt.Load(dr) 

      'Clean Up: 
      dr.Close() 
      cn.Close() 

     End Using ' cmd 
    End Using ' cn 

    'Return the DataTable to calling code: 
    Return dt 

End Function ' StatesDataTable 

Если бы я должен был использовать этот DataTable для заполнения списка на моей основной форме с StateID (спрятан в качестве элемента Value например ListBox) и StateName (отображается, как DisplayMember из списка ListBox). Когда пользователь нажал на определенное состояние в списке, можно было бы вернуть StateID из свойства Valuemember и передать его в качестве параметра другой функции, возможно, которая может вернуть dataTable округов, связанных с этим состоянием:

'Shared Keyword makes this function Available without instantiating the containing class: 
Public Shared Function CountiesDataTable(ByVal CountyID As Integer) As DataTable 

    'Set up your SQL Statement to execute against your back end: 
    Dim SQL As String = _ 
    "SELECT CountyID, StateID, CountyName " & _ 
    "FROM tblCounties " & _ 
    "WHERE CountyID = @CountyID " & _ 
    "ORDER BY CountyName" 

    'Initialize a DataTable: 
    Dim dt As New DataTable 

    'The Using Keyword is elegant in that it handles bothersome Disposal tasks 
    'for unmanaged objects such as Database Connections: 
    Using cn As New OleDb.OleDbConnection(My.Settings.CreateTHisConnection) 
     Using cmd As New OleDb.OleDbCommand(SQL, cn) 

      'Add a parameter which limits the result set to counties in the specified state: 
      cmd.Parameters.AddWithValue("@CountyID", CountyID) 
      'Open the Connection: 
      cn.Open() 

      'Retreive the Data into a DataReader: 
      Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader 

      'Load the contents of the Reader into your datatable: 
      dt.Load(dr) 

      'Clean Up: 
      dr.Close() 
      cn.Close() 

     End Using ' cmd 
    End Using ' cn 

    'Return the DataTable to calling code: 
    Return dt 

End Function ' CountiesDataTable 

Затем можно использовать полученный результат этой функции для загрузки в всплывающую форму или какой-либо другой механизм для отображения округов, связанных с выбранным состоянием.

Не уверен, что это то, за чем вы после, но без немного больше, чтобы продолжить, я сделал все, что мог. , ,

Моя методология здесь немного неортодоксальная в земле ADO.NET, но мне она нравится, потому что она позволяет мне неявный контроль над WHAT, который я вытягиваю из Back-end.Не то, что для многих приложений, глобально доступная «Общая» функция, как это пригодится - Для того, чтобы извлечь в DataTable государства (или графства) «по требованию», я просто сделать следующее:

Dim dtStates As DataTable = MyDataFactory.StatesDataTable 
    Dim dtCounties As DataTable = MyDataFactory.Counties(ByVal StateID As Integer) 

Во всяком случае , который помогает. Не стесняйтесь следить, если вы можете уточнить, что вы пытаетесь сделать, или найти это интересное, и хотите получить дополнительную информацию.

Смежные вопросы