我正试图找出解决程序问题的最佳方法。基本上,我有一个包含书籍代码(1,2,3等)的列表框。 1,2,3代表3本不同的书。我有一个文本文件,其中包含以下信息:
文本文件格式:
bookCode,bookTitle,bookPrice,quantityofBooks
文本文件虚拟信息:
1,第一册,第22册,第5页
2,第二册,第10册,第3册
3,书3,5,15
我并不总是知道这个文本文件中会有多少行。我要做的是分割每一行,并将每一行放入某种数组或列表中,并能够访问这些单独列表中的每个项目(例如:第一册,第二册,所以我可以将它们放入列表框中)例如,有人点击列表框中的“Book Two”,我的标签将随着Book Two的价格而变化。
如何将bookTitle(第一册,第二册等)放入列表框,如何将每一行拆分为单独的列表,将该行的每个项目拆分成一个列表?
我不太确定我已经解释了我想要的内容以及可以解释的内容。如果这令人难以置信,我很抱歉。
答案 0 :(得分:5)
声明此类
public class Book
{
string BookName;
int bookCode;
decimal bookPrice;
int bookQuanity
}
然后使用以下代码从文件中读取:
List<Book> Books = new List<Book>();
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
{
string str;
string[] strArray;
str = sr.ReadLine();
strArray = str.split(',');
Book currentBook = new Book();
currentBook.bookCode = strArray[0];
currentBook.BookName = strArray[1];
currentBook.bookPrice = double.parse(strArray[2]);
currentBook .bookCode = int.parse(strArray[3]);
Books.add(currentBook);
}
}
//listbox = the name you gave your listbox
listbox.DataSource = Books;
listbox.ValueMember = "bookCode";
listbox.DisplayMember = "BookName";
答案 1 :(得分:1)
我会先为本书创建课程
public class Book
{
public int BookCode { set;get;}
public string BookTitle { set;get; }
public decimal BookPrice { set;get}
public int Quantity { set;get;"
}
从您的数据源(在本例中为文本文件)中读取并将其存储在我们的Book类的列表中
List<Book> bookList=new List<Book>();
bookList=BookManager.GetBookList(); // gets the list of books read from the text file.
将其存储在全局范围内,以便您可以从表单中的任何方法访问它。
当您想要访问有关图书的特定数据时,请使用Linq来获取它
var book=(from p in bookList where p.BookCode=2).FirstOrDefault();
if(book !=null)
{
lblPrice.Text=book.BookPrice.ToString();
}
要将BookTitles放到List框中,可以在绑定时将DataTextField称为BookTitle。
lstBooks.DataSource=bookList;
lstBooks.DataValueField="BookCode";
lstBooks.DataTextField="BookTitle ";
lstBooks.DataBind();
要从文本文件中读取文件并将其填充到Book对象列表中,请执行以下操作
public List<Book> GetBookList()
{
List<Book> objBooks=new List<Book>();
using (StreamReader file = new StreamReader(@"C:\dataist.txt"))
{
while ((line = file.ReadLine()) != null)
{
char[] delimiters = new char[] { ',' };
string[] parts = line.Split(delimiters);
Book objBook=new Book();
objBook.BookCode=parts[0];
objBook.BookTitle =parts[0];
objBook.BookPrice =Convert.ToDecimal(parts[0]);
objBook.Quantity =Convert.ToInt32(parts[0]);
objBooks.Add(objBook);
}
file.Close();
}
return objBooks;
}
如果可能,我会将图书详细信息存储到数据库表中。它更易于管理和维护,我不需要担心读取和写入文件。
我假设您正在为Windows窗体应用程序执行此操作。
答案 2 :(得分:0)
Book objBook = new Book();
objBook.BookCode=Convert.ToInt32(parts[0]);
objBook.BookTitle =parts[0];
objBook.BookPrice =Convert.ToDecimal(parts[0]);
objBook.Quantity =Convert.ToInt32(parts[0]);