2012-03-15 4 views
0

3つのバインドされていないDataGridViewコントロールを使用して特定の情報を表示しています。これらのDGVに情報をロードするには、暗号化されたファイルから情報を引き出し、解読して情報を解析し、その情報でDGVを埋めようとしています。ファイルからの読み込みは、メニュー項目のクリックによって呼び出されます。特に名前を付けないで、バインドされていないDataGridViewを参照していますか?

Private Sub miCLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Handles miCLoad.Click 
    Dim FilePath As String = "C:\FList\CList.clt" 
    Dim LoadFile As New SaveandLoad.SaveAndLoad 
    Dim FileRead As New Simple3Des("MyPassword") 
    Dim FileString As String = FileRead.ReadFile(FilePath) 


    With LoadFile 
     .WhichList = dgCourses 
     .FilePath = FilePath 
     .DecryptedString = FileRead.DecryptData(FileString) 
     .dgList = dgCourses 
    End With 

    Call LoadFile.LoadFile() 
End Sub 

Public Class SaveandLoad 
Public Property WhichList As New DataGridView 
Public Property FilePath As String 
Public Property DecryptedString As String 
Public Property EncryptedString As String 
Public Property dgList As Control 

Public Sub LoadFile() 

    Dim dgRow As DataGridViewRow 
    Dim dgCell As DataGridViewTextBoxCell 
    Dim Lines() As String = DecryptedString.Split(vbLf) 
    Dim LinesList As List(Of String) = Lines.ToList 
    LinesList.RemoveAt(Lines.Length - 1) 

    For Each Line As String In LinesList 
     Dim Fields() As String = Line.Split(",") 
     dgRow = New DataGridViewRow 

     For x = 0 To (WhichList.Columns.Count - 1) Step 1 
      dgCell = New DataGridViewTextBoxCell 
      dgCell.Value = Fields(x).ToString 
      dgRow.Cells.Add(dgCell) 
     Next 
     WhichList.Rows.Add(dgRow) 
    Next 

    Select Case WhichList.Name 
     Case "dgCourses" 
      frmFacultyList.dgCourses = WhichList 
      frmFacultyList.dgCourses.Refresh() 
      WhichList.Dispose() 
     Case "dgFList" 
      frmFacultyList.dgFList = WhichList 
      frmFacultyList.dgFList.Refresh() 
      WhichList.Dispose() 
     Case "dgSList" 
      frmFacultyList.dgSList = WhichList 
      frmFacultyList.dgSList.Refresh() 
      WhichList.Dispose() 
    End Select 

    MsgBox("List Successfully Loaded", vbOKOnly, "Load") 

End Sub 

が、私は「SELECT CASE」または「IF-THEN」ステートメントを使用せずにDGVを参照することができる(または塗りつぶし)したい:ここでは私がこれまで持っているものです。将来的に追加される他の多くのDGVを追加すると、これは非効率的になります。したがって、タイトルが主な質問です。私はここで、2010年

+0

他の人の質問に答えることで私自身の質問に答えたようです。私は、単にメインフォームのコントロールコレクションのインスタンスを作成し、そこからそれぞれを実行することができました。誰かがコード例を思いつくことができれば、私はあなたに信用を与えるでしょう。そうでなければ、私は明日自分の質問に答えます(私ができる前に8時間待たなければなりません)。 –

答えて

0

VS Expressを使用しています

Dim FormControls As New frmFacultyList.ControlCollection(frmFacultyList) 

     For Each DGV As DataGridView In FormControls 
      If WhichList.Name = DGV.Name Then 
       DGV = WhichList 
       DGV.Refresh() 
      End If 
     Next 

コントロールコレクションのインスタンスを作成し、For Eachを使用してDGVを具体的に検索します。シンプルで効率的。

0

私は(....何らかの方法で参考になってもよい)しかし、私はC#で私の解決策を投稿します、あまりにも多くのVBを知らない

DataGridView myDGV; 
foreach (var item in this.Controls) 
{ 
    if (item.GetType() == typeof(DataGridView)) 
    { 
     if (((DataGridView)item).Name == WhichList.Name) 
     { 
      //Cannot assing to 'item' here, because it is a 'foreach iteration variable' 
      //However you can save the variable for later use. 
      myDGV = (DataGridView)item; 
     } 
    } 
} 
myDGV = WhichList; 




// different approach 
DataGridView myDGV = (DataGridView)this.Controls.Find(WhichList.Name, false).First(); 
myDGV = WhichList; 
+0

あなたの別のアプローチは非常に近いです。しかし同じロジック、: 'コード' 薄暗い新frmFacultyList.ControlCollection(frmFacultyList)としてFormControls FormControlsでDataGridViewのように、各DGVについては WhichList.Name = DGV.Nameが続い DGV = WhichList DGV.Refresh() END IFの場合 次へ 'code' –

関連する問題