Ich arbeite an diesem Projekt und wurde gebeten, einen Code zu schreiben, um Daten von InvoiceDB und CustomerDB mit Form1.Cs zu verbinden. Ich bin fertig mit meinem Code, aber irgendwie hat es nicht funktioniert. Wenn ich ein Programm ausführe, konnte die Listview in form1 keine Daten von Klassen erhalten. Ich würde gerne um Hilfe von Experten bitten. Danke.Kundenrechnungsformular; generische Listen; C#
Mein Code Form1.cs
private void Form1_Load(object sender, EventArgs e)
{
{
**//Get data from Invoice and Customer Class**
List<Invoice> invoiceList = InvoiceDB.GetInvoices();
List<Customer> customerList = CustomerDB.GetCustomers();
**//Query expression**
var invoices = from invoice in invoiceList
join customer in customerList
on invoice.CustomerID equals customer.CustomerID
orderby customer.Name, invoice.InvoiceTotal descending
select new {customer.Name, invoice.InvoiceID, invoice.InvoiceDate, invoice.InvoiceTotal};
**//Executes the query**
string customerName = " ";
int i = 0;
foreach (var invoice in invoices)
{
if (invoice.Name != customerName)
{
lvInvoice.Items.Add(invoice.Name);
customerName = invoice.Name;
}
else
{
lvInvoice.Items.Add(" ");
}
lvInvoice.Items[i].SubItems.Add(invoice.InvoiceID.ToString());
lvInvoice.Items[i].SubItems.Add(Convert.ToDateTime(invoice.InvoiceDate).ToShortDateString());
lvInvoice.Items[i].SubItems.Add(invoice.InvoiceTotal.ToString("C"));
i += 1;
}
}
}
CustomerDB Klasse
public static class CustomerDB
{
private const string Dir = @"";
private const string Path = Dir + "CustomersX23.txt";
public static List<Customer> GetCustomers()
{
List<Customer> customers = new List<Customer>();
StreamReader textIn = new StreamReader(
new FileStream(Path, FileMode.Open, FileAccess.Read));
while (textIn.Peek() != -1)
{
string row = textIn.ReadLine();
string[] columns = row.Split('|');
Customer customer = new Customer();
customer.CustomerID = Convert.ToInt32(columns[0]);
customer.Name = columns[1];
customers.Add(customer);
}
textIn.Close();
return customers;
}
InvoiceDB Klasse
public static class InvoiceDB
{
private const string Dir = @"";
private const string Path = Dir + "Invoices.txt";
public static List<Invoice> GetInvoices()
{
List<Invoice> invoices = new List<Invoice>();
StreamReader textIn = new StreamReader(
new FileStream(Path, FileMode.Open, FileAccess.Read));
while (textIn.Peek() != -1)
{
string row = textIn.ReadLine();
string[] columns = row.Split('|');
Invoice invoice = new Invoice();
invoice.InvoiceID = Convert.ToInt32(columns[0]);
invoice.CustomerID = Convert.ToInt32(columns[1]);
invoice.InvoiceDate = Convert.ToDateTime(columns[2]);
invoice.ProductTotal = Convert.ToDecimal(columns[3]);
invoice.SalesTax = Convert.ToDecimal(columns[4]);
invoice.Shipping = Convert.ToDecimal(columns[5]);
invoice.InvoiceTotal = Convert.ToDecimal(columns[6]);
invoices.Add(invoice);
}
textIn.Close();
return invoices;
}
Danke hinzufügen, aber Ich habe bereits Spalten in der Design-Form hinzugefügt. Irgendwelche andere Meinung? – Duke
Dann schlage ich vor, den Debugger zu verwenden. Setzen Sie einen Haltepunkt auf die Methoden, die Ihre Daten lesen, und auf die Linq-Abfrage, die sie verbindet. Überprüfen Sie, ob Sie die erforderlichen Daten haben. – Steve
Ich habe versucht, Ihr Problem zu reproduzieren, Ihren Code zu kopieren, und ich habe das gleiche Problem, bis ich die Spalten im Code definierte (bevor Sie Elemente zur ListView hinzufügten und es zeigten) Nicht sicher an diesem Punkt, wenn Ihr Problem im gezeigten Code ist. Versuchen Sie, _lvInvoice.Columns.Clear(); _ hinzuzufügen und fügen Sie dann aus dem Code die Spalten hinzu. – Steve