Как получить значения всех столбцов выбранной строки dataGridView в TextBoxes - PullRequest
0 голосов
/ 25 июня 2018

Я работаю над приложением Windows Form.

Содержит две формы MainForm - Test и childForm - Поиск

Форма поиска имеет элемент управления dataGridView. Он содержит столбцы, такие как SrNo, TypeNo, TestEngineer и Date. И тестовая форма содержит текстовые поля tb_SerialNo, tb_TypeNo, tb_TestEngineer, datTimePicker для даты.

Мой главный вопрос: когда я выбираю Row из таблицы данных, я хочу получить значение столбца SrNo из этой строки в текстовом поле tb_SerialNo. То же самое для всех.

Я написал следующий код. Но это дает мне только значение SrNo в tb_SerialNo. но я не получил TypeNo, TestEnginer и значения даты в соответствующих текстовых полях. Я не могу найти то, что мне не хватает. Пожалуйста, помогите мне решить эту проблему. заранее спасибо.

mainForm - тестовый код

private void SearchToolStripMenuItem_Click(object sender, EventArgs e)
    {
        SearchTest Search = new SearchTest(dt);
        Search.ShowDialog();
        dt.DefaultView.RowFilter = "";
        tb_SerialNo.Text = Search.SerialNo;
        Search.typeNo = tb_TypeNo.Text;
        Search.TestEngineer = tb_TestEngineer.Text;
        Search.Date = dateTimePicker1.Text;
    }

ChildForm -SearTest Код:

public partial class SearchTest : Form
{
    public SearchTest(DataTable TestData)
    {
        InitializeComponent();
        dataGridView1.DataSource = TestData;
        this.dataGridView1.Sort(this.dataGridView1.Columns["SrNo"], ListSortDirection.Ascending);
    }


    private void btn_Search_Click(object sender, EventArgs e)
    {
        string str = dateTimePicker1.Text;
        string str1 = dateTimePicker2.Text;

        DateTime date = DateTime.ParseExact(str, "MM/dd/yyyy", CultureInfo.GetCultureInfo("en-GB"));
        DateTime date1 = DateTime.ParseExact(str1, "MM/dd/yyyy", CultureInfo.GetCultureInfo("en-GB"));
        string dtFilter = string.Format("[Date] >= '{0} ' AND [Date] <= '{1} '", date.ToString("MM/dd/yyyy"), date1.ToString("MM/dd/yyyy"));
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = dtFilter;

    }

    private void tb_SearchSrNo_TextChanged(object sender, EventArgs e)
    {
        try
        {
            (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = String.IsNullOrEmpty(tb_SearchSrNo.Text) ?
                "SrNo IS NOT NULL" :
                String.Format("SrNo LIKE '{0}%' OR SrNo LIKE '{1}%' OR SrNo LIKE '{2}%'", tb_SearchSrNo.Text, tb_SearchSrNo.Text, tb_SearchSrNo.Text);
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void SearchTest_Load(object sender, EventArgs e)
    {
        groupBox1.Enabled = false;
        groupBox3.Enabled = false;
        cb_Filter.MouseWheel += new MouseEventHandler(cb_Filter_MouseWheel);
    }

    private void cb_Filter_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cb_Filter.SelectedIndex == 0)
        {
            groupBox1.Enabled = true;
        }
        else
        {
            groupBox3.Enabled = true;
        }
    }
    void cb_Filter_MouseWheel(object sender, MouseEventArgs e)
    {
        ((HandledMouseEventArgs)e).Handled = true;
    }

    private string SrNo;
    private string TypeNo;
    private string TestEng;
    private string date;

    public string SerialNo
    {
        get { return SrNo; }
        set { SrNo = value; }
    }
    public string typeNo
    {
        get { return TypeNo; }
        set { TypeNo = value; }
    }
    public string TestEngineer
    {
        get { return TestEng; }
        set { TestEng = value; }
    }
    public string Date
    {
        get { return date; }
        set { date = value; }
    }
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        SrNo = dataGridView1.CurrentRow.Cells["SrNo"].Value.ToString();
        TypeNo = dataGridView1.CurrentRow.Cells["TypeNo"].Value.ToString();
        TestEng = dataGridView1.CurrentRow.Cells["TestEngineer"].Value.ToString();
        date = dataGridView1.CurrentRow.Cells["Date"].Value.ToString();
    }

}

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы можете изменить определения свойств на что-то вроде этого:

public string SomeProperty
{
    get 
    { 
        string value = null;
        if(BindingContext[dataGridView1.DataSource].Current !=null)
        {  
           var r = ((DataRowView)BindingContext[dataGridView1.DataSource].Current).Row;    
           value = r.Field<string>("SomeDataColumn");
        }
        return value;
    }
}

Таким образом, SomeProperty всегда будет возвращать значение SomeDataColumn из активной строки.

0 голосов
/ 26 июня 2018

Я получил ответ, и моя проблема решена. Я нашел свою ошибку в mainForm - Тестовый код. Я неправильно использовал свойства для typeNo, TestEngineer и даты, за исключением серийного номера. Вот почему я не получил значения в соответствующих текстовых полях.

Исправленная MainForm - тестовый код:

private void SearchToolStripMenuItem_Click(object sender, EventArgs e)
{
    SearchTest Search = new SearchTest(dt);
    Search.ShowDialog();
    dt.DefaultView.RowFilter = "";

    tb_SerialNo.Text = Search.SerialNo;
    tb_TypeNo.Text = Search.typeNo;
    tb_TestEngineer.Text = Search.TestEngineer;
    dateTimePicker1.Text = Search.Date;
}

Нет необходимости вносить какие-либо изменения в форму поиска.

0 голосов
/ 25 июня 2018

Попробуйте вместо этого использовать SelectedRow.
Разница между SelectedRow и CurrentRow:

  • CurrentRow - это место, где курсор мыши выбирается системой.
  • SelectedRow - строкавыбрано в таблице данных и всегда выбирается пользователем.

Вот пример кода:

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    if (dataGridView1.SelectedCells.Count > 0)
    {
        int index = dataGridView1.SelectedCells[0].RowIndex;
        DataGridViewRow selectedRow = dataGridView1.Rows[index];

        SrNo = selectedRow.Cells["SrNo"].Value.ToString();
        TypeNo = selectedRowCells["TypeNo"].Value.ToString();
        TestEng = selectedRowCells["TestEngineer"].Value.ToString();
        date = selectedRowCells["Date"].Value.ToString();
    }
}
...