2010-06-27 1 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 
using System.IO; 
namespace shop_management 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public class user 
     { 
      public string İsim { set; get; } 
      public string Borç { set; get; } 

     } 
     public class item 
     { 
      public string Tehlike { set; get; } 
      public string İsim { set; get; } 
      public decimal Birim { set; get; } 
      public decimal Miktar { set; get; } 

     } 
     public MainWindow() 
     { 
      this.InitializeComponent(); 
      if (!(File.Exists("C:\\data\\users"))) //here the software checks if the files exist or not 
      { 
       MessageBox.Show("Error!!!"); 
       this.Hide(); 
      } 
      if (!(File.Exists("C:\\data\\items"))) 
      { 
       MessageBox.Show("Error!!!"); 
       this.Hide(); 
      } 
      string dan_in=""; 
      StreamReader sr_main; 
      int i = 0,j=0; 
      List<item> list_items = new List<item>(); 
      string first_read; 
      sr_main = File.OpenText("C:\\data\\items"); //this is the file that we take our items data 
      first_read = sr_main.ReadToEnd(); 
      string[] manip_read = first_read.Split('\t'); //in the file, there is only "/t"s between datas. for example "name1/tprice1/tcount1/tdanger1t/name2/tprice2/tcount2/tdanger2" etc. 
      item[] items = new item[300]; //here i declared a 300 items long array, which means the software will crash if there is 301, solve this! 
      foreach (string line in manip_read) 
      { 


       if (i == 0) items[j].İsim = line; //this line keeps record of the items name 
       if (i == 1) items[j].Birim = Convert.ToDecimal(line); // this line keeps the price 
       if (i == 2) items[j].Miktar = Convert.ToDecimal(line); // this line keeps how many left 
       if (i == 3) items[j].Tehlike = line; //and this line keeps the danger level 
       i++; 
       if (i == 4) //here the loop adds the data to list 
       { 
        if (items[j].Miktar < Convert.ToDecimal(items[j].Tehlike) || items[j].Miktar == Convert.ToDecimal(items[j].Tehlike)) dan_in = "!!!"; 
        list_items.Add(new item() { İsim = items[j].İsim, Miktar =items[j].Miktar , Birim=items[j].Birim, Tehlike=dan_in }); 
        dan_in = ""; 
        i = 0; 
        j++; 
       } 

      } 
      grid_items.ItemsSource = list_items; 
     } 
    } 
} 

Здесь проблема в том, что я запускал эту часть программного обеспечения раньше, но без массива элементов [300]. В то время есть только один экземпляр элемента, но теперь мне также нужно держать их в массиве. Кажется, что есть ошибка с первым оператором if, который пытается присвоить имя İsim значение первого элемента (item [0]).Невозможно назначить данные массиву объектов в WPF с помощью C#

спасибо за любую помощь

ответ

4

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

items[j] = new item(); 

В настоящее время вы просто пытаетесь установить надлежащее связей на объекте, который не существует, т. е. посредством нулевой ссылки.

(я согласен с идеей использования List<item>, а также, кстати. Я также переименовать item в Item, чтобы вписываться в конвенциях .NET именовании.)

Учитывая текущий код, то Простейшим решением является, вероятно, это:

if (i == 0) 
{ 
    items[j] = new item(); 
    items[j].İsim = line; 
} 
+0

+1 для 'С учетом вашего текущего кода' :-) –

+0

ОК, чем я считаю, что мой код не является« debugabble »: D спасибо в любом случае: D – gkaykck

+0

@gkaykck: Да, я серьезно подумал бы о попытке реорганизовать ваш код, чтобы быть более читаемым. Такие вещи, как только объявление переменных, когда они вам нужны, и разбиение методов на более мелкие. –

0
item[] items = new item[300]; //here i declared a 300 items long array, which means the software will crash if there is 301, solve this! 

Используйте динамический список вместо массива фиксированной длины:

List<item> items = new List<item>(); 
+0

спасибо, но это не был вопрос: D – gkaykck

+1

правильно, но это действительно трудно читать ваш код. –

+0

, но также я думаю, что я могу использовать только user_items для манипулирования элементами. я попробую, снова спасибо – gkaykck

Смежные вопросы