Datagridview показывает только последнюю запись хотя у меня есть больше строк при сравнении currentreading excel и таблицы счетов
Проблема
Datagridview показывает только последнюю запись, хотя у меня есть больше строк, когда currentreading excel меньше, чем currentreading invoice table .
неверный результат в другое заявление btn_import щелкните внутри цикла for счетчик
Мне нужно изменить код в else, чтобы принять список, а не показывать только одну запись .
Подробности
У меня есть excelsheet следующим образом :
unitcode CurrentReading
12 2000
14 4500
и у меня есть таблица счет-фактура в базе данных в sql server 2012 имеет следующие поля
серийный код единицы измерения CurrentReading год месяц
1 12 1000 2018 3
3 14 5000 2018 3
так что как отобразить код блока 14 в datagridview .
На самом деле мне нужно, чтобы currentreading для кода единицы измерения в листе excel был меньше, чем currentreading в таблице invoice отображал значения в datagridview . формула выглядит следующим образом
btn импорт этот импорт из excel
btn_import click { for (int i = 0; i < dt.Rows.Count; i++) { System.Data.DataTable dt = new System.Data.DataTable(); dt = Showdataprint(); decimal LastMeterReading = ConvertToDecimal(GetLastReading(dt.Rows[i]["UnitCode"].ToString())); if (!string.IsNullOrEmpty(dt.Rows[i]["CurrentMeterReading"].ToString()) && ConvertToDecimal(dt.Rows[i]["CurrentMeterReading"]) > 0 && ConvertToDecimal(dt.Rows[i]["CurrentMeterReading"]) > ConvertToDecimal(LastMeterReading)) { //insert to table invoice } else { System.Data.DataTable dtErrorRows = new DataTable(); DataView dv2 = new DataView(dt); dv2.RowFilter = "(CurrentMeterReading < " + LastMeterReading + ")" + "and" + "(UnitCode = " + Utilities.ObjectConverter.ConvertToInteger(dt.Rows[i]["UnitCode"]) + ")"; dv2.RowStateFilter = DataViewRowState.CurrentRows; int a = dv2.Count; if (dv2.Count > 0) { dtErrorRows = dv2.ToTable(); } } } Grid.DataSource = dtErrorRows; } function get data from excel public System.Data.DataTable Showdataprint() { string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", txtpath.Text); OleDbConnection con = new OleDbConnection(connectionString); con.Open(); string str = @"SELECT [UnitCode],[CurrentMeterReading] FROM [Sheet5$] "; OleDbCommand com = new OleDbCommand(); com = new OleDbCommand(str, con); OleDbDataAdapter oledbda = new OleDbDataAdapter(); oledbda = new OleDbDataAdapter(com); DataSet ds = new DataSet(); ds = new DataSet(); oledbda.Fill(ds, "[Sheet5$]"); con.Close(); System.Data.DataTable dt = new System.Data.DataTable(); dt = ds.Tables["[Sheet5$]"]; return dt; } for selecting currentreading from Invoice Table : private decimal GetLastReading(string UnitCode) { string sqlquery = ""; sqlquery = @"select isnull((select top 1 CurrentMeterReading from WAHInvoice where UnitCode=" + UnitCode + " order by year , Serial desc),0)"; object nullableValue = DataAccess.ExecuteScalar(sqlquery); decimal myValue; if (nullableValue == null || nullableValue == DBNull.Value) { myValue = 0; } else { decimal.TryParse(nullableValue.ToString(), out myValue); } return Utilities.ObjectConverter.ConvertToDecimal(DataAccess.ExecuteScalar(sqlquery)); }
Ожидаемый результат в datagridview
unitcode CurrentReading
14 4500
Что я уже пробовал:
Datagridview show only last record although I have more rows when compare currentreading excel and invoice table