c# DataGridView проблемка:(
Попробуй использовать виртуальный режим.
По-хорошему, надо бы BindingSource использовать...
http://www.gotdotnet.ru/LearnDotNet/WinForms/597.aspx
либо на МСДН читать про databinding, как уже заметили.
либо на МСДН читать про databinding, как уже заметили.
про databinding все понятно, но интересует именно этот вопрос
как при таком раскладе обновить таблицу?
пробовал вставлять
все без толку. Таблица всегда остается такой как после первого заполнения
как при таком раскладе обновить таблицу?
пробовал вставлять
_grid.SelectAll;
_grid.ClearSelection;
_grid.Refresh;
все без толку. Таблица всегда остается такой как после первого заполнения
что-то ты делаешь не правильно, проблема где-то в твоем коде, а не в гриде.
грид должен все сразу обновлять во время присваивания без всяких refresh-ей.
показывай код целиком
грид должен все сразу обновлять во время присваивания без всяких refresh-ей.
показывай код целиком
режим телепатии (скорее всего данные из старого массива выводишь, а не из нового).
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Net;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
string qwe;
public Form1
{
InitializeComponent;
}
public void Form1_Load(object sender, EventArgs e)
{
}
private string[,] data(string stroka)
{
int i, n = 0, n1 = 0, razmer = 0;
string[,] dannie = new string[,]
{{"02bebefe-13e9-4f3c-94bb-49b0cb8faad8", "00-19-A6-FA-D7-B9"},
{"05b4f043-4303-4024-a2c5-b127cce6510a", "00-19-A6-FA-D7-C0"},
{"9eb86de0-f714-42f1-897c-b3f5495cc154", "00-19-A6-FA-D5-4B"},
{"52c5eabc-c64e-438e-8484-5251070bba20", "00-1B-DD-F0-0C-2A"}};
string[,] temp = new string[dannie.Length / 2, 2];
i = dannie.Length / 2;
int num = 0;
string a, b;
while (n <= i - 1)
{
a = dannie[n, 0];
b = dannie[n, 1];
if (a.Contains(stroka) || b.Contains(stroka
{
temp[num, 0] = dannie[n, 0];
temp[num, 1] = dannie[n, 1];
n1 = 1;
num++;
}
if (n1 == 1)
{
razmer++;
n1 = 0;
}
n++;
}
string[,] rezult = new string[razmer, 2];
int z = 0;
while (z <= razmer-1)
{
rezult[z, 0] = temp[z, 0];
rezult[z, 1] = temp[z, 1];
z++;
}
return (rezult);
}
public void textBox1_TextChanged(object sender, EventArgs e)
{
qwe = textBox1.Text;
main (qwe);
}
private void main(string qwe)
{
string[,] s = null;
if (qwe == null) { qwe = "00"; }
s = data(qwe);
DataGridView _grid = new DataGridView;
_grid.Dock = DockStyle.Fill;
_grid.AllowUserToAddRows = false;
Controls.Add(_grid);
_grid.Columns.Add(new DataGridViewTextBoxColumn;
_grid.Columns[0].HeaderText = "GUID";
_grid.Columns[0].Width = 215;
_grid.Columns.Add(new DataGridViewTextBoxColumn;
_grid.Columns[1].HeaderText = "MAC";
_grid.Columns[1].Width = 103;
_grid.Columns.Add(new DataGridViewButtonColumn;
_grid.Columns[2].HeaderText = "данные ";
_grid.Rows.Add;
for (int i = 0; i <= s.Length / 2 - 2; i++)
{
DataGridViewRow heter_row = new DataGridViewRow;
for (int j = 0; j < _grid.Columns.Count; j++)
heter_row.Cells.Add(new DataGridViewTextBoxCell;
_grid.Rows.Add(heter_row);
}
int num = 0;
DataGridViewRow row0 = _grid.Rows[0];
while (num <= s.Length / 2 - 1)
{
label1.Text = Convert.ToString(num);
DataGridViewTextBoxCell txtCell = (DataGridViewTextBoxCell)_grid.Rows[num].Cells[0];
txtCell.Value = (s[num, 0]);
_grid.Rows[num].Cells[1].Value = (s[num, 1]);
num++;
}
}
}
}
label1 там просто для проверки (массив обновляется)
в textBox1 вводятся данные, по совпадению возвращается массив с новыми данными
private void main(string qwe)вот это неправильно.
{
...
DataGridView _grid = new DataGridView;
...
Controls.Add(_grid);
ты каждый раз вставляешь новый grid в форму и именно в новом гриде меняешь данные, соответственно этот новый грид выводится под предыдущими гридами, поэтому ты и не видишь изменений.
вынеси создание грида в конструктор, а еще лучше вставь грид через дизайнер
для геологического сойдет, но посоветую следующее:
1. while-ы заменить на for-ы
вместо
2. в условиях цикла использовать <, а <=
n < i, вместо n <= i-1
3. вместо двухмерного массива использовать массив классов
4. использовать говорящие имена вместо i,a,b и n
5. переменные объявлять в том блоке, где они используются, при первой реальной инициализации, а не в самом начале метода
1. while-ы заменить на for-ы
for (int n = 0; n < i; ++n)
{
}
вместо
int i, n = 0, n1 = 0, razmer = 0;
while (n <= i - 1)
{
..
n++;
}
2. в условиях цикла использовать <, а <=
n < i, вместо n <= i-1
3. вместо двухмерного массива использовать массив классов
class Item
{
public Item{}
public Item(string id, string mac){this.Id = id;this.Mac = mac; }
public string Id;
public string Mac;
}
Item[] dannie = new Item[]{
new Item("02bebefe-13e9-4f3c-94bb-49b0cb8faad8", "00-19-A6-FA-D7-B9"
...
}
4. использовать говорящие имена вместо i,a,b и n
5. переменные объявлять в том блоке, где они используются, при первой реальной инициализации, а не в самом начале метода
3. вместо двухмерного массива использовать массив классовА не Dictionary?

> А не Dictionary?
нет, конечно.
dictionary - нужен только в одном случае, если нужно обеспечить быстрый доступ по уникальному ключу.
нет, конечно.
dictionary - нужен только в одном случае, если нужно обеспечить быстрый доступ по уникальному ключу.
а как системе отдать http адрес? соответственно чтоб запускался дефолтный браузер с этой ссылкой?
ЗЫ хочу повесить обработчик клика, чтоб при этом, исходя их данных, генерируется ссылка и отдается винде
ЗЫ хочу повесить обработчик клика, чтоб при этом, исходя их данных, генерируется ссылка и отдается винде
up 

upProcess.Start![]()
Process.Startенто то понятно, мне интересует как скормить ссылку чтоб открылся дефолтный браузер. Вытаскивать инфу из реестра не очень хочется
Process.Start("тут://сцылко")
Оставить комментарий
apxx
есть DataGridView, заполняется из массива s. Содержимое массива меняется а вот что первый раз вывелось на экран больше не меняется. Вывожу так:while (num<1000)
{
DataGridViewTextBoxCell txtCell = (DataGridViewTextBoxCell)_grid.Rows[num].Cells[0];
txtCell.Value = (s[num, 0]);
num++
}
как лучше решить такое? почему старые значения не затираются?:(