#c# #csv
#c# #csv
Вопрос:
Я хотел создать простое окно поиска из текстового поля в Visual Studio, где вы будете вводить определенную букву или ключевое слово, чтобы вы могли искать / фильтровать существующий контракт из .csv.
И затем он будет отображаться в dataGridView1. Я проанализировал файл .csv и создал из него источник данных под названием «tbl».
Теперь каждый раз, когда я что-то ввожу в свой txtBoxSearch, появляется эта ошибка.
Необработанное исключение типа ‘System.Data.Исключение EvaluateException’ произошло в System.Data.dll
Дополнительная информация: не удается найти столбец [Имя]
Это части, связанные с ошибкой
private void txtBoxSearch_TextChanged(object sender, EventArgs e)
{
DataView DV = new DataView(tbl);
DV.RowFilter = string.Format("Approved Contracts LIKE '%{0}%'", txtBoxSearch.Text);
dataGridView1.DataSource = DV;
}
Вот где ошибка ->
DV.RowFilter = string.Format("Approved Contracts LIKE '%{0}%'", txtBoxSearch.Text);
Вот мой полный код.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Contract_Management_System
{
public partial class frmMain : Form
{
DataTable tbl = new DataTable();
string file = "Approved.csv";
int colNum = 10;
DataSet dataset;
public frmMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] lines = System.IO.File.ReadAllLines(file);
string[] data_col = null;
int x = 0;
foreach (string line in lines)
{
data_col = line.Split(',');
if (x == 0)
{
//header
for (int i = 0; i <= data_col.Count() - 1; i )
{
tbl.Columns.Add(data_col[i]);
}
x ;
}
else
{
//data
tbl.Rows.Add(data_col);
}
}
dataGridView1.DataSource = tbl;
DataGridViewButtonColumn createButtonColumn = new DataGridViewButtonColumn();
createButtonColumn.Name = "Create Contract";
createButtonColumn.Text = "Create";
int columnIndex = 2;
if (dataGridView1.Columns["Create Contract"] == null)
{
dataGridView1.Columns.Insert(columnIndex, createButtonColumn);
}
dataGridView1.CellClick = dataFromBAC_CellClick;
}
private void dataFromBAC_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Create Contract"].Index)
{
//MessageBox.Show("Create!");
//dataFromBAC.Rows.RemoveAt(this.dataFromBAC.SelectedRows[0].Index);
}
}
private void txtBoxSearch_TextChanged(object sender, EventArgs e)
{
DataView DV = new DataView(tbl);
DV.RowFilter = string.Format("Name LIKE '%{0}%'", txtBoxSearch.Text);
dataGridView1.DataSource = DV;
}
private void btnFromBAC_Click(object sender, EventArgs e)
{
fromBAC form2 = new fromBAC();
form2.Visible = true;
}
private void btnPending_Click(object sender, EventArgs e)
{
Pending form4 = new Pending();
form4.Visible = true;
}
private void btnEndNotif_Click(object sender, EventArgs e)
{
End form3 = new End();
form3.Visible = true;
}
private void btnFromAMO_Click(object sender, EventArgs e)
{
fromAMO form5 = new fromAMO();
form5.Visible = true;
}
private void btnSearch_Click(object sender, EventArgs e)
{
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}
Ответ №1:
Ваш блок «полный код» отличается от вашего образца — он имеет:
DV.RowFilter = string.Format("Name LIKE '%{0}%'", txtBoxSearch.Text);
Который соответствует исключению
Additional information: Cannot find column [Name]
Столбец с именем ‘Name’ был бы только в том случае, если бы в csv был столбец с заголовком ‘Name’. Я бы посоветовал просмотреть csv и подтвердить заголовки там. Кроме того, выполните журнал отладки или дамп имен столбцов по мере их добавления — вы можете обнаружить, что они добавляются с кавычками или пробелами, поэтому фактическое имя столбца в таблице данных равно ["Name"]
или [Name ]
Если вы собираетесь фильтровать по столбцу, вызываемому Approved Contracts
с пробелом в нем, ваша фактическая строка фильтра должна быть:
DV.RowFilter = string.Format("[Approved Contracts] LIKE '%{0}%'", txtBoxSearch.Text);
Комментарии:
1. О, извините за это! Я забыл отредактировать это, так как одновременно редактировал свой код.
2. Спасибо! Это сработало, большое вам спасибо за помощь, я застрял на этом около часа.