У меня есть текстовый файл со списком ИмяПринтера, Ip, описание и ConnectionStringIDфильтр DataTable на основе состояния
например
Name,Ip,Description,connectionstringID
gkbzpl01,12.43.13,425,2nd floor,Datatable
ackzpl201,13.44.65,324,1st floor,Datatable
Я загрузить это в капельном downlist как таковой:
protected void LoadPrinterList()
{
string CSVFilePathName = System.Configuration.ConfigurationManager.AppSettings["FilePath"];
string[] Lines = File.ReadAllLines(CSVFilePathName);
string[] Fields;
Fields = Lines[0].Split(new char[] { ',' });
int Cols = Fields.GetLength(0);
DataTable dt = new DataTable();
//1st row must be column names; force lower case to ensure matching later on.
for (int i = 0; i < Cols; i++)
dt.Columns.Add(Fields[i].ToLower(), typeof(string));
dt.Columns.Add("nameanddescription", typeof(string), "name +'-'+ description");
dt.Columns.Add("ipandconnectionstring", typeof(string), "ip +'-'+ ConncetionStringID");
DataRow Row;
for (int i = 1; i < Lines.GetLength(0); i++)
{
Fields = Lines[i].Split(new char[] { ',' });
Row = dt.NewRow();
for (int f = 0; f < Cols; f++)
Row[f] = Fields[f];
dt.Rows.Add(Row);
}
string hostname = Request.UserHostName.Substring(0, 3);
string[] name = Printerlist.SelectedValue.Split('-');
//string plant = name[0].ToString();
//string plantvalue = plant.Substring(0, 3);
//if(hostname == plantvalue)
//{
Printerlist.DataTextField = "nameanddescription";
Printerlist.DataValueField = "ipandconnectionstring";
//}
Printerlist.DataSource = dt;
Printerlist.DataBind();
}
вышеупомянутое работает чудесно, но теперь мне нужно отображать только принтеры этикеток, которые относятся к этому конкретному заводу, в общей сложности 4 завода, каждый из которых имеет 5 или более принтеров и 2 тестовых принтера, к которым у меня есть доступ в корпоративном здании.
так это то, что я до сих пор
string servername = HttpContext.Current.Request.Url.Host;
string firstthreeserver = servername.Substring(0, 3);
string clientname = HttpContext.Current.Server.MachineName;
string firstthreeclient = clientname.Substring(0, 3).ToLower();
if (firstthreeserver.ToLower() == firstthreeclient.ToLower())
{
DataRow[] result = dt.Select("nameanddescription Like '%" + firstthreeclient + "%'");
for (int i = 1; i < Lines.GetLength(0); i++)
{
Fields = Lines[i].Split(new char[] { ',' });
Row = dt.NewRow();
for (int f = 0; f < Cols; f++)
Row[f] = Fields[f];
dt.Rows.Add(result);
}
}
else
{
string test = "tes".ToLower();
foreach (var row in dt.Select("nameanddescription like '%" + test + "%'"))
{
dt.ImportRow(row);
}
}
так что я получаю имя сервера (gkbserv) и клиент, который обращается приложение с сервера (gkb001) я беру первые три буквы и сравнить если выше это верно, тогда отобразите gkbzpl01-2ndfloor в выпадающем списке. если выше это неверно, тогда отобразите два тестовых принтера. как я могу отфильтровать таблицу данных, чтобы показывать только записи, удовлетворяющие условию?
это выглядит, как вы использовали dt.Select, чтобы попытаться отфильтровать с «как» оператор уже .. вы получите сообщение об ошибке с этим подходом? –