Я хотел бы, чтобы моя DataGrid считывала идентификатор строки и заполняла значения строки в новом окне - PullRequest
0 голосов
/ 04 апреля 2020
namespace CaseManagementSystem

{

public partial class DataGrid_HBD : UserControl
{

    public DataGrid_HBD()
    {
        InitializeComponent();

        // 2 Seconds Timer before connecting to the Database.
        // This improves UI rendering on button click
        DataGrid_Data();
    }

    /// <summary>
    /// Loading Data Grid
    /// </summary>
    public void DataGrid_Data()
    {
        // 2 second delay before loading DataGrid
        var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(3) };
        timer.Start();
        timer.Tick += (sender, args) =>
        {
            timer.Stop();

            // Attemption to connect to SQL Server database and populate DataGrid with database tables. 
            try
            {
                string connectionString = ("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");
                SqlConnection connection = new SqlConnection(connectionString);

                SqlCommand cmd = new SqlCommand("SELECT [hb_Disputes].[DSP_ID], [hb_disputes].[ACCOUNT], [hb_disputes].[CUST_NAME],[hb_disputes].[PREM_ADDR], [hb_status].[Status], [hb_disputes].[OPENED], [hb_disputes].[DEADLINE], [hb_rpttype].[ReportType], [hb_ratetype].[RateType] FROM [hb_disputes] LEFT JOIN [hb_status] ON [hb_disputes].[STATUS] = [hb_status].[STSID] LEFT JOIN [hb_rpttype] ON [hb_disputes].[RPTTYPE] = [hb_rpttype].[RPTID] LEFT JOIN [hb_ratetype] ON [hb_disputes].[REV_CLS] = [hb_ratetype].[RTID]", connection);
                connection.Open();
                DataTable dt = new DataTable();

                dt.Load(cmd.ExecuteReader());
                connection.Close();

                dtGrid.DataContext = dt;
            }
            catch
            {
                MessageBox.Show("Database connection is not available at this time. Please contact your database administrator ");
            }

        };
    }

    private void dtGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        // User double clicks on DataGrid Row
        // Open new Window
        // Populate selected textboxes with selected datarow
        DataGrid gd = (DataGrid)sender;
        DataRowView row_selected = gd.SelectedItem as DataRowView;
        var windowToOpen = new Window1();

        if(gd !=null )
        {
            windowToOpen.txt_RowRecrd.Text = row_selected["DSP_ID"].ToString();
            windowToOpen.txt_acctnumber.Text = row_selected["ACCOUNT"].ToString();
            windowToOpen.txt_custname.Text = row_selected["CUST_NAME"].ToString();
            windowToOpen.txt_address.Text = row_selected["PREM_ADDR"].ToString();
            windowToOpen.txt_opened.Text = row_selected["OPENED"].ToString();
            windowToOpen.txt_deadline.Text = row_selected["DEADLINE"].ToString();
            windowToOpen.txt_revcls.Text = row_selected["RateType"].ToString();
            windowToOpen.Show();
        }
        else
        {
            return;
        }
    }

В настоящее время, когда пользователь дважды щелкает строку Строка данных, у меня написан какой-то код, возьмите ТОЛЬКО столбцы, отображаемые в таблице данных, и заполните их в соответствующих текстовых полях.

Я хотел бы иметь ограниченную информацию о гриде данных и показывать всю строку данных, когда пользователь дважды щелкает их текстовые поля и комбинированные списки.

Я думаю, что мне понадобится некоторый код, чтобы иметь Мой "Windows1" прочитал DSP_ID и заполнил соответствующие текстовые поля и комбинированные списки информацией в этой строке.
Screenshot of New Window with populated Information

1 Ответ

0 голосов
/ 04 апреля 2020

Даже если сетка данных не показывает определенный столбец, данные все еще доступны из базовой строки (класс DataRowView имеет .Row, который дает базовый DataRow) через DataRowView. Если вам нужно больше данных в вашем dt, добавьте столбцы к запросу select. Если вы хотите, чтобы в сетке отображалось меньше данных, отберите столбцы, которые показывает сетка. Передайте DataRowView строки сетки в новое открывшееся окно, и текстовые поля могут получить дополнительную информацию, даже если она не была видна в сетке.

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