27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 691
1

Как одновременно можно програмно и в ручную добавлять строки в DataGridView?

10.04.2016, 16:14. Показов 799. Ответов 8
Метки нет (Все метки)

У меня имеется DGW и BindingList<MyClass>. Как в него программно добавить новые строки? Я умею добавлять только в ручную со своим классом или програмно, если я использую BindingList<T>, где Т - любой базоый тип данных, к примеру int. Проблема в том, что со соим классом у меня не получается исползовать метод BindingList1.Add(); поскольку в качестве данных он принимает только тип MyClass, а с базовым типом в GUI нет нижнй строки для добавления новых элементов и для этого надо городить отдельный интерфейс, думаю, это должно быть решаемо и без этого.

конструкция типа for (int i = 0; i < 10; ++i) bl1.Add(new MyClass(Item)); не работает, выход за пределы диапазона
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2016, 16:14
Ответы с готовыми решениями:

VS 2008, C++ (Only), DataGridView. Как добавлять и выводить строки с данными в DataGridView в несвязном режиме (без готовой БД)?
Перегуглил всё, что можно. На MSDN нет кода C++. Можно ссылки (только не на С#)

DataGridView как запретить редактировать содержимое строк (уже созданих) но иметь возможность добавлять строки
Вообщем по названию все понятно думаю есть БД подключенная к DataGrid, грид отображает строки...

Как можно добавлять итемы в несколько строчек с переносом строки?
Подскажите как можно добавлять итемы в несколько строчек с переносом строки?

Запретить пользователю добавлять строки в DataGridView
в dataGridView когда начинаешь заполнять последнюю строку, создается еще одна, мне надо это...

8
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
10.04.2016, 18:36 2
Никогда не пользовался байндингом в winforms, вот попробовал, данные добавляются:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public partial class Form1 : Form
    {
        public BindingList<MyClass> list { get; set; }
        
        public Form1()
        {
            InitializeComponent();
            list = new BindingList<MyClass>();
            dgv.DataSource = list;
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            list.Add(new MyClass { Name = "Name 1" });
        }
 
        public class MyClass
        {
            private string name;
            public string Name
            {
                get { return name; }
                set { if (name != value) name = value; }
            }
        }
или может я вопрос не правильно понял)
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 691
10.04.2016, 18:55  [ТС] 3
Jotun, заменил круглые скобки на фигурные, в результате получил косяк <<Невозможно инициализировать тип "OOP.MyClass" инициализатором коллекции, поскольку он не реализует интерфейс "System.Collections.IEnumerable">> Короче нет поддержки индексации значений, в чём может быть проблема? Класс у меня вроде ничем не отличается от вашего, поле, конструктор и методы сет/гет.
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
10.04.2016, 19:09 4
приведите код

Добавлено через 12 минут
Цитата Сообщение от Ваю Посмотреть сообщение
заменил круглые скобки на фигурные
Если вы просто заменили скобки здесь:
C#
1
bl1.Add(new MyClass { Item })
то этого не достаточно, свойству Item нужно присвоить значение. Или создать конструктор где это значение будет присваиваться.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 691
10.04.2016, 19:29  [ТС] 5
Цитата Сообщение от Jotun Посмотреть сообщение
Или создать конструктор где это значение будет присваиваться
C#
1
2
3
4
5
6
7
public class MyClass {
    private Int16? X0;
 
    public MyClass (Int16? x0) { this.X0 = x0; }
    public MyClass () { this.X0 = null; }
    public Int16? x0 { set { X0 = value; } get { return X0; } }
}
у меня вот так сделано
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
10.04.2016, 20:17 6
ну тогда можно просто:
C#
1
2
3
bl1.Add(new MyClass()) // хотя так возможно никакие данные не добавятся в датагрид
// или
bl1.Add(new MyClass { X0 = 100 })
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 691
10.04.2016, 20:54  [ТС] 7
C#
1
2
3
4
5
6
7
8
9
10
private void tsmi1_Click(object sender, EventArgs e) {
    dataGridView1.DataSource = bl1;
    dataGridView1.Columns[0].HeaderText = "Значение";
    dataGridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
    
    int tb1; Random Rnd = new Random();
    try { tb1 = Convert.ToInt32(textBox1.Text); }
    catch { tb1 = 32; textBox1.Text = "32"; } 
    for (int i = 0; i < tb1; ++i) bl1.Add(new MyClass { x0 = (Int16?)Rnd.Next() });
}
Цитата Сообщение от Ваю Посмотреть сообщение
x0
по имени поля, где методы set/get

Всё ещё что-то не так, после нажатия на кнопку падает с ошибкой <<Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll>>

Добавлено через 19 минут
Кто может подсказать что не так?
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
10.04.2016, 20:58 8
Не понимаю пока, сделал всё как у вас:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public partial class Form1 : Form
    {
        public BindingList<MyClass> list { get; set; }
        
        public Form1()
        {
            InitializeComponent();
            list = new BindingList<MyClass>();
            dgv.DataSource = list;
            dgv.Columns[0].HeaderText = "Значение";
            dgv.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int tb1;
            try { tb1 = Convert.ToInt32(textBox1.Text); }
            catch { tb1 = 32; textBox1.Text = "32"; }
            Random Rnd = new Random();
            for (int i = 0; i < tb1; i++ )
                list.Add(new MyClass { x0 = (Int16?)Rnd.Next() });
        }
 
        public class MyClass
        {
            private Int16? X0;
 
            public MyClass(Int16? x0) { this.X0 = x0; }
            public MyClass() { this.X0 = null; }
            public Int16? x0 { set { X0 = value; } get { return X0; } }
        }
Миниатюры
Как одновременно можно програмно и в ручную добавлять строки в DataGridView?  
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 691
11.04.2016, 01:45  [ТС] 9
У меня вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
 
namespace VP6_13
{
    public partial class Form1 : Form
    {
        public BindingList<D1> bl1 = new BindingList<D1>();
        public BindingList<D2> bl2 = new BindingList<D2>();
        public int tb1;
        
        public Form1() { InitializeComponent(); }
        
        public void Form1_Load(object sender, EventArgs e) {
            dataGridView1.DataSource = bl1;
            try {
                dataGridView1.Columns[0].HeaderText = "Значение";
                dataGridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            }
            catch { }
        }
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e = null) { }
        
        private void button1_Click(object sender, EventArgs e) {
            int i = 0, tb1; Random Rnd = new Random();
            dataGridView1.DataSource = bl1;
 
            try { tb1 = Convert.ToInt32(textBox1.Text); }
            catch { tb1 = 32; textBox1.Text = "32"; } 
            for (i = 0; i < tb1; ++i) bl1.Add(new D1 { x0 = (Int16?)Rnd.Next() });
        }
    }
}
Добавлено через 4 часа 27 минут
Что-то с проектом было, пришлось пересоздавать заного, копипаста тоже не помогла, писал заного с нуля... работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 01:45
Помогаю со студенческими работами здесь

Как можно сгруппировать строки в DataGridView?
Добрый день, подскажите как можно сгруппировать строки в DataGridView?Чтобы детали с одинаковым...

Как програмно в dataGridView сделать поле ComboBox?
Как програмно в dataGridView сделать поле Combox? Ниже приведённый код к результату не приводит....

Как правильно извлекать и добавлять данные с DataGridView?
Доброго времени суток, вообщем нужна ваша помощь. Почему выводяться к примеру такие ошибки:...

Как можно програмно создать папку?
Как можно програмно создать папку?

Как добавлять имена в DataGridView через другую form в которой textbox и button
Как добовлять имена в DataGridView через другую form с помощью textbox и button. У меня есть form1...

Можно ли сделать так чтобы к классу можно было бы одновременно обращаться как к массиву
подскажите можно ли сделать так чтобы к классу можно было бы одновременно обращаться как к массиву?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru