Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Поиск записи


Автор: maxnoskov 21.9.2006, 10:27
Такой вопрос, как зная индекс записи в Datatable узнать индекс этой же записи в DataGridView, если источником для DataGridView является дефолтный просмотр этой Datatable

Автор: ivashkanet 21.9.2006, 10:53
Он будет такой же как и в DataSet-e.
P.S. Любой Grid не содержит данных, он только их отображает smile

Автор: andrx 21.9.2006, 14:44
я так понял, что используется 2005 студия.
у меня пока 2003 и я делал так, попробуй :
Код

DataView dataView = (DataView)((CurrencyManager)BindingContext[dg.DataSource, dg.DataMember]).List;
                    int i = Array.IndexOf(dataView.Table.Select("", dataView.Sort), row);


i - номер записи
dg - DataGrid
row - записи в DataTable 


должно работать независимо от стиля грида и выполненных сортировок в гриде

Автор: maxnoskov 25.9.2006, 14:41
Цитата(ivashkanet @ 21.9.2006,  10:53)
Он будет такой же как и в DataSet-e.
P.S. Любой Grid не содержит данных, он только их отображает smile

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

Автор: reloni 25.9.2006, 15:02
maxnoskov, имелась ввиду не позиция в гриде, а значение поля, например "ID", вот оно точно всегна будет одинаковым.

Автор: maxnoskov 25.9.2006, 15:41
Цитата(reloni @ 25.9.2006,  15:02)
maxnoskov, имелась ввиду не позиция в гриде, а значение поля, например "ID", вот оно точно всегна будет одинаковым.

Ну с этим не поспоришь smile 
Но мне нужна именно позиция в гриде, а это вопрос не тривиальный

Автор: andrx 26.9.2006, 09:41
для 2005
Код

int indexRowInDataTable = 1;
// определяем индекс в DataGridView
DataView dataView = (DataView)((CurrencyManager)BindingContext[this.dataGridView1.DataSource, this.dataGridView1.DataMember]).List;
int indexRowInDataGridView = Array.IndexOf(dataView.Table.Select("", dataView.Sort), dataView.Table.Rows[indexRowInDataTable]);


1. Создай проект
2. Положи на форму dataGridView1
3. Положи на форму button1 и добавь обработчик button1_Click

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace proba1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            DataTable dt = new DataTable();
            dt.Columns.Add("col1",typeof(string));
            DataRow row;
            for (int i = 0; i < 10; i++)
            {
                row = dt.NewRow();
                row[0] = i;
                dt.Rows.Add(row);
            }
            this.dataGridView1.DataSource = dt;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            int indexRowInDataTable = 1;

            // определяем индекс в DataGridView
            DataView dataView = (DataView)((CurrencyManager)BindingContext[this.dataGridView1.DataSource, this.dataGridView1.DataMember]).List;
            int indexRowInDataGridView = Array.IndexOf(dataView.Table.Select("", dataView.Sort), dataView.Table.Rows[indexRowInDataTable]);

            MessageBox.Show("значение элемента в DataTable : " + dataView.Table.Rows[indexRowInDataTable][0].ToString() 
                + "\nиндекс в DataTable : " + indexRowInDataTable.ToString() 
                + "\nиндекс в DataGridView : " + indexRowInDataGridView.ToString());

        }
    }
}



Автор: maxnoskov 28.9.2006, 01:06
Глубоко признателен, большое спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)