Код должен сработать, как только я закончу редактирование данных во вторичном окне.Все работает как надо, но ScrollIntoView
не сработает.Он выбирает правильный Index
, но затем отказывается перейти к нему.
Я полностью потерян в этой точке.Я подозреваю, что это связано с тем, что для загрузки DataTable
в DataGrid
(я играю со странными запросами) требуется около 500 мс , а код пытается переместитьсяSelectedIndex
до того, как это станет возможным?
Примечание: "dg_part.SelectedIndex = -1;"должно быть там, или я не могу правильно запустить новое событие SelectionChanged.
Код:
public void DG_Part_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (CurrentPartID != 0)
{
int lastId = CurrentPartID;
EditWindow ew = new EditWindow(CurrentPartID)
{
Owner = this
};
ew.ShowDialog();
if (Public_Strings.invokeDataGridParts == "yes")
{
InvokeDataGridPart();
SqlPartsSetToRow(lastId);
dg_part.ScrollIntoView(dg_part.Items[dg_part.SelectedIndex]);
dg_part.SelectedIndex = -1;
}
}
}
public void InvokeDataGridPart()
{
SqlCommand cmd = new SqlCommand
{
CommandText = "SELECT * FROM cbu_deli WHERE [IDX] = '" + CurrentID + "' ORDER BY LEN ([DEL]), [DEL] ASC, [OPIS] DESC, [DELEZ] DESC",
Connection = con
};
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
SqlDataAdapter da = new SqlDataAdapter(cmd);
dtPart.Clear();
da.Fill(dtPart);
dg_part.ItemsSource = dtPart.DefaultView;
mycollection.GroupDescriptions.Clear();
mycollection.GroupDescriptions.Add(new PropertyGroupDescription("DEL"));
dg_part.ItemsSource = mycollection.View;
Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;
}
public int CurrentPartID
{
get
{
int tmp = 0;
if (dg_part.SelectedIndex >= 0)
{
int.TryParse(dtPart.Rows[dg_part.SelectedIndex].ItemArray[0].ToString(), out tmp);
}
return tmp;
}
}
public void SqlPartsSetToRow(int Id)
{
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
dg_part.SelectionChanged -= DG_Part_SelectionChanged;
while (CurrentPartID != Id && dg_part.SelectedIndex < dtPart.Rows.Count - 1)
{
dg_part.SelectedIndex++;
}
dg_part.SelectionChanged += DG_Part_SelectionChanged;
Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;
}