Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > DataGridView


Автор: Legolas 8.6.2007, 18:30
Имеется DataGridView, при нажатии кнопки хотелось бы поменять значение в одной из ячеек. Делаю так - выдает ошибку.

Код

public string istr;
        public string[] parts;
        public int irek;
        public Form5(string str)
        {
            InitializeComponent();
            istr = str;
           
            



            char[] seps = { ' ' };
            string[] massiv = File.ReadAllLines("База.txt");
            for (int u = 0; u < massiv.Length; u++)
            {
                if ((massiv[u].StartsWith(istr)) && (istr != null))
                {
                    string[] parts = massiv[u].Split(seps);
                    for (int i = 0; i < parts.Length; i++) ;
                    dataGridView1.Rows.Clear();
                    dataGridView1.Rows.Add(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9], parts[10]);

                    string rek = parts[10];
                    
                    irek = int.Parse(rek);
                    
                    if (irek > 0)
                    {
                        richTextBox2.Text = "-" + irek + " " + "р.";                        
                    }
                    else if (irek < 0)
                    {
                        richTextBox2.Text = irek + " " + "р.";
                    }
                    else { }

                    

                }
                else { }
            }
            
        }

        
        

        private void button1_Click(object sender, EventArgs e)
        {
            string pl = richTextBox1.Text;
            int ipl;
            ipl = int.Parse(pl);
            int itable = irek + ipl;
            string table = String.Format("{0:D}", itable);
            parts[1] = table;
        }

Автор: Retro 8.6.2007, 19:59
Legolas, ты бы писал сразу какая ошибка и в какой строке. smile 

Было бы легче найти проблему.

Автор: Legolas 8.6.2007, 20:11
Ошибка в 56 строке - "Object reference not set to an instance of an object."

Автор: tol05 8.6.2007, 22:13
Цитата(Legolas @  8.6.2007,  18:30 Найти цитируемый пост)
if ((massiv[u].StartsWith(istr)) && (istr != null))    
                {    
                    string[] parts = massiv[u].Split(seps);

локальная parts будет инициализирована, и то, при условии что...
а массив класса? ("public string[] parts;") Где инициализируется?

И вобще что это такое?
Цитата(Legolas @  8.6.2007,  18:30 Найти цитируемый пост)
public string istr;    
        public string[] parts;


Цитата(Legolas @  8.6.2007,  18:30 Найти цитируемый пост)
if ((massiv[u].StartsWith(istr)) && (istr != null))    
                {    
                    string[] parts = massiv[u].Split(seps);


Не есть хорошо для анализа.

Автор: SherbAnt 10.6.2007, 06:32
Может проблема в том что компилятор "понимает" в строчке

Код

parts[1] = table;


parts за вот эту

Код

public string[] parts;   //строка 2


а она ведь ни разу не была присвоена.
Может я ошибаюсь, но разве можно присваивать  второму элементу массива значения, если не пустой первый элемент?


П.С. сейчас нет при себе компилятора что бы проверить

Автор: Legolas 10.6.2007, 23:31
Код

public string [] parts; //делаю доступным для всей формы
public Form5(string str)
        {
            InitializeComponent();
            istr = str;
           
            
            char[] seps = { ' ' };
            string[] massiv = File.ReadAllLines("База.txt");
            for (int u = 0; u < massiv.Length; u++)
            {
                if ((massiv[u].StartsWith(istr)) && (istr != null))
                {
                    parts = massiv[u].Split(seps);//Здесь изменил
                    for (int i = 0; i < parts.Length; i++) ;
                    dataGridView1.Rows.Clear();
                    dataGridView1.Rows.Add(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9], parts[10]);
                    string rek = parts[10];
                    
                    irek = int.Parse(rek);
                    
                    if (irek > 0)
                    {
                        richTextBox2.Text = "-" + irek + " " + "р.";                        
                    }
                    else if (irek < 0)
                    {
                        richTextBox2.Text = irek + " " + "р.";
                    }
                    else { }
                    
                }
                else { }
            }
            
        }

private void button1_Click(object sender, EventArgs e)
        {
            string pl = richTextBox1.Text;
            int ipl;
            ipl = int.Parse(pl);
            int itable = irek + ipl;
            string table = String.Format("{0:D}", itable);
            parts[1] = table; //Этой строчкой хотел бы поменять содержимое ячейки parts[1] в исходном строковом массиве
        }


PS: а можно ли напрямую обратиться к DataGridView и поменять содержимое ячейки?

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