2013-06-12 2 views
2

Я разрабатываю форму окна в vb.net 2010. Это простой с двумя элементами управления. Один из них - datagridview для отображения данных в табличной форме, а другой - элемент управления диаграммой, который извлекает данные из gridview для рисования диаграмм. У меня также есть combobox, который помогает выбрать переменную, для которой я хотел бы иметь таблицу или диаграммы. Кроме того, есть две кнопки, одна из которых называется «таблицей», на которую накладывается gridview с данными из внешнего файла excel. Другая кнопка с надписью «plot» отображает данные, которые были импортированы в gridview.Как обновить данные в datagridview во время выполнения в VB.NET 2010

Предположим, у меня есть три переменные в comboBox, «Реальный ВВП», потребление, инвестиции. Во время выполнения во время первого выбора любой переменной она работает отлично. Но во время того же запуска, если я выберу другую переменную, gridview может импортировать переменную, но график не может нарисовать диаграмму. Участок не может найти переменную, потому что он все еще ищет первую переменную, а в gridview. У меня есть таблица для второй переменной. Кажется, есть разрыв между gridview и plot, если мы выберем другую переменную после отображения первого.

Если я закрою прогон и перестрою и выберите другую переменную, он отлично работает. Но снова во время этого запуска, если я выберу другую переменную, она терпит неудачу. Вот мой код:

Public Class Form1 
Dim MyConnection As System.Data.OleDb.OleDbConnection 
Dim DtSet As System.Data.DataSet 
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 

Dim myStr1, myStr2, myStr3 As String 
Dim msgStr, msgEnd, defValStr, defValEnd, _ 
    title, myValStr, myValEnd As String 

Public Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    myStr1 = selectVariable.SelectedItem 
    MsgBox("You have chosen " & myStr1) 
    ' Defining a InputBox to enter Sample Period 
    ' Start Period 
    msgStr = "Enter your Starting time period: Between 1980 and 2012" 
    defValStr = "1982" 
    title = "Define Sample Time Period" 
    myValStr = InputBox(msgStr, title, defValStr) 
    ' End Period 
    msgEnd = "Enter your Ending time period: Between 1980 and 2012" 
    defValEnd = "2012" 
    title = "Define Sample Time Period" 
    myValEnd = InputBox(msgEnd, title, defValEnd) 
    Select Case myStr1 
     Case "Real GDP" 
      myStr2 = "xgdp" 
     Case "Consumption" 
      myStr2 = "CP" 
     Case "Investment" 
      myStr2 = "IP" 
    End Select 

    myStr3 = String.Concat("select", " ", "FY", ",", myStr2, " ", "from", " ", "[Dataset$]", " ", "where", " ", "FY>=", myValStr, " ", "and", " ", "FY<=", myValEnd) 
    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='J:\Rushad\MOF\EViews Stuff\Data_Macro_Model.xls';Extended Properties=Excel 8.0;") 
    MyCommand = New System.Data.OleDb.OleDbDataAdapter(myStr3, MyConnection) 
    MyCommand.TableMappings.Add("Table", "Net-informations.com") 
    DtSet = New System.Data.DataSet 
    MyCommand.Fill(DtSet) 
    DataGridView1.DataSource = DtSet.Tables(0) 
    MyConnection.Close() 
End Sub 

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 
    Chart1.DataSource = DtSet 
    Chart1.Series.Add(myStr2) 
    Chart1.Series(myStr2).XValueMember = "FY" 
    Chart1.Series(myStr2).YValueMembers = myStr2 
End Sub 

End Class 
+0

Кажется, если я изменил Button2 Sub от частного к публичному, он работает просто отлично! – bigmonty

+0

В вашей Button2_Click сбросьте свой график, выполнив следующие действия: Если Chart1.Series.Count> 0, тогда Chart1.Series.Clear – Steve

ответ

0

Вы должны попробовать привязки источника данных к BindingSource и связывания Binding источник вашего DataGrid

BindingSourceExample.DataSource = DataToBind 
DataGridView.DataSource = BindingSourceExample 

по крайней мере, это то, как я буду это делать!

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