WPF DataGrid выберите первую строку - PullRequest
0 голосов
/ 05 ноября 2019

Я использую TabControl и DataGrid на каждой вкладке.

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

IsSynchronized = on
SelectionMode = Extended
SelectionUnit = FullRow

Мне нужно правильное утверждение для кнопки выбора. Это мой код:

    private void Btn1_Click(object sender, RoutedEventArgs e)
    {
        var DG1 = dg1.SelectedCells[0];
        var cellInfor = dg1.SelectedCells[0];
        dg1.CurrentCell = new DataGridCellInfo(dg1.Items[0], dg1.Columns[0]);
        var DG11 = (cellInfor.Column.GetCellContent(cellInfor.Item) as TextBlock).Text;

        if (dg1 == null || dg1.CurrentCell == null)
        {
            MessageBox.Show("there is no recorid selected");
                return;
        }
    }

    private void Btn2_Click(object sender, RoutedEventArgs e)
    {
        var DG2 = dg2.SelectedItems[0].ToString();

        if (DG2.Items[0].ToString() == null || DG2.SelectedItem[0] == null)
        {
            MessageBox.Show("There is no RecID number selected", "Error");
            return;
        }


        int RecID = Convert.ToInt32(DG22);
        //this.AptzClearControls();
        //this.GetAptzRecipe(RecID);
        //this.DisplayAptzRecipe();

Ответы [ 4 ]

0 голосов
/ 12 ноября 2019

Обновление до вышеуказанного результата. Если DataGrid пуст, оператор if останавливает завершение программы.

    private void Btn2_Click(object sender, RoutedEventArgs e)
    {
        if (dg2.SelectedIndex == -1)
        {
            MessageBox.Show("There is no recipe selected", "Error");
            return;
        }

        var DG2 = dg2.SelectedCells[0]; 
        var cellInfor = dg2.SelectedCells[0];
        dg2.CurrentCell = new DataGridCellInfo(dg2.Items[0], dg2.Columns[0]);
        var DG22 = (cellInfor.Column.GetCellContent(cellInfor.Item) as TextBlock).Text;

        MessageBox.Show(DG22);

         int AddID = Convert.ToInt32(DG22);
0 голосов
/ 08 ноября 2019

Я пришел к получению клетки, если выбран ряд. Если нет, программа вылетает. Как я могу остановить программу. Я использовал оператор if, но он не остановит программу, если ничего не выбрано, и программа вылетает.

    private void Btn2_Click(object sender, RoutedEventArgs e)
    {

        var DG2 = dg1.SelectedCells[0];

        if (DG2 == null || dg2.CurrentCell == null)
        {
            MessageBox.Show("there is no recorid selected");
            return;
        }

        var cellInfor = dg2.SelectedCells[0];
        dg2.CurrentCell = new DataGridCellInfo(dg2.Items[0], dg2.Columns[0]);
        var DG22 = (cellInfor.Column.GetCellContent(cellInfor.Item) as TextBlock).Text;

        MessageBox.Show(DG22);
                 int AddID = Convert.ToInt32(DG22);   
    }
0 голосов
/ 11 ноября 2019

Чтобы всегда был выбран ряд. Настройки, SelectionMode + = Extended, SelectionUnit = FullRow Может ли пользователь добавлять строки = False, Автогенерация заголовка столбца = False. Для данных я использовал привязку к базе данных SQL. MainWindow.xaml Я добавил привязку DataGridTextColumn и имя заголовка. В MainWindow> xaml.cs я выбрал первую ячейку для данных AddID. Я надеюсь, что это помогает другим.

        <TabItem x:Name="tab2" Header="tab2">
            <Grid Background="#FFE5E5E5" DataContext="{StaticResource addTableViewSource}" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <DataGrid x:Name="dg2" HorizontalAlignment="Left" Height="136" Margin="34,29,0,0" VerticalAlignment="Top" Width="500"
                          ItemsSource="{Binding}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True" RenderTransformOrigin="0.529,0.412" AutomationProperties.IsColumnHeader="True">
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding AddID}" Header="AddID" Foreground="#FFBF0E0E"/>
                        <DataGridTextColumn Binding="{Binding FName}" Header="FName"/>
                        <DataGridTextColumn Binding="{Binding LName}" Header="LName"/>
                        <DataGridTextColumn Binding="{Binding Street}" Header="Street" Foreground="#FF18904F"/>
                        <DataGridTextColumn Binding="{Binding City}" Header="City"/>
                        <DataGridTextColumn Binding="{Binding State}" Header="State"/>
                        <DataGridTextColumn Binding="{Binding Zip}" Header="Zip"/>

                    </DataGrid.Columns>

                </DataGrid>

                <Button x:Name="btn2" Content="Button" HorizontalAlignment="Left" Margin="273,185,0,0" VerticalAlignment="Top" Width="75" Click="Btn2_Click" RenderTransformOrigin="-2.084,4.366"/>
            </Grid>
        </TabItem>

    private void Btn2_Click(object sender, RoutedEventArgs e)
    {
        var DG2 = dg2.SelectedCells[0]; 
        var cellInfor = dg2.SelectedCells[0];
        dg2.CurrentCell = new DataGridCellInfo(dg2.Items[0], dg2.Columns[0]);
        var DG22 = (cellInfor.Column.GetCellContent(cellInfor.Item) as TextBlock).Text;

        MessageBox.Show(DG22);

         int AddID = Convert.ToInt32(DG22);
0 голосов
/ 05 ноября 2019

DG22 в конце? Вам, вероятно, нужен DG2. Для этой кнопки вы также можете использовать try {} catch {}.

if (DG2.Items[0].ToString() != null && DG2.SelectedItem[0] != null)
        {
        int RecID = Convert.ToInt32(DG2);
        }
else 
{
MessageBox.Show("There is no RecID number selected", "Error");
return;
}

==================== Отредактировано =========== Я не уверен, что вы пытаетесь сделать .. Вам нужно получить строку / столбец выбранной ячейки?
Посмотрите на эту страницу: Руководство Microsoft .

Вам нужно что-то подобное:

private void selectedCellsButton_Click(object sender, System.EventArgs e)
{
    Int32 selectedCellCount =
        dataGridView1.GetCellCount(DataGridViewElementStates.Selected);
    if (selectedCellCount > 0)
    {
            for (int i = 0; i < selectedCellCount; i++)
            {
                (dataGridView1.SelectedCells[i].RowIndex.ToString());
                (dataGridView1.SelectedCells[i].ColumnIndex.ToString());
            }

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