Путаница данных - выбор данных в одном DataGridView на основе выбора в другом - PullRequest
1 голос
/ 05 октября 2009

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

Примечание: я использую Visual Basic.NET

Моя форма имеет 2 элемента управления DataGridView. Один из них связан с набором данных, другой не виден - по крайней мере, пока пользователь не выберет ячейку уникального идентификатора в 1-й сетке.

Когда пользователь делает этот выбор, 2-я сетка становится видимой и отображает строку от другого с тем же идентификатором, что и выбранная в 1-й сетке.

Итак, в основном я хочу динамически отображать данные в одной сетке на основе выбора пользователя в другой сетке.

Мой код выглядит так ...

Private Sub RulesGrid_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles RulesGrid.CellClick
    Try
        FlagsGrid.Visible = True
        ''// MsgBox(RulesGrid.CurrentCell.Value.ToString())
        Dim sql As String = "SELECT * FROM ctblMKA_Status_Flags " + _
            "WHERE intStatusID = '" & RulesGrid.CurrentCell.Value & "'"
        DSFlags = GetDS(sql)
        DSFlags.DataSetName = "FlagsDataSet"
        FlagsGrid.DataSource = DSFlags
        ProgressBar.Visible = False
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Я чувствую, что здесь что-то упущено ... Есть идеи у кого-нибудь?

Ответы [ 2 ]

0 голосов
/ 05 октября 2009

Если вы используете DataTable, назначьте CurrencyManager, затем добавьте PositionChanged в вашу переменную CurrencyManager.

переменная уровня класса:

CurrencyManager _cmShoe;

после загрузки данных в таблицу данных:

// make a currency(current) manager on DataTable variable
_cmShoe = this.BindingContext[_dtShoe] as CurrencyManager;

// add event on the CurrencyManager variable
_cmShoe.PositionChanged += cmShoe_PositionChanged;

событие:

void cmShoe_PositionChanged(object sender, EventArgs e)
{
    Guid shoeGuid = (Guid)((cmShoe.Current as DataRowView)["shoe_id"]);

    // _dtShoeMaterial is the table of the second datagridview
    _dtShoeMaterial.DefaultView.RowFilter = "shoe_id = '" + shoeGuid.ToString() + "'";
}

Если вы используете BindingSource (вместо DataTable), просто добавьте событие PositionChanged в переменную BindingSource и используйте это событие:

void cmShoe_PositionChanged(object sender, EventArgs e)
{
    Guid shoeGuid = (Guid)((bdsShoe.Current as DataRowView)["shoe_id"]);

    // bdsShoeMaterial is the table of the second datagridview
    bdsShoeMaterial.Filter = "shoe_id = '" + shoeGuid.ToString() + "'";        
}
0 голосов
/ 05 октября 2009

Использование отдельного DataView для второй DataGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...