2016-04-12 2 views
0

У меня есть текстовый файл со списком ИмяПринтера, 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 в выпадающем списке. если выше это неверно, тогда отобразите два тестовых принтера. как я могу отфильтровать таблицу данных, чтобы показывать только записи, удовлетворяющие условию?

+0

это выглядит, как вы использовали dt.Select, чтобы попытаться отфильтровать с «как» оператор уже .. вы получите сообщение об ошибке с этим подходом? –

ответ

1

Вы можете использовать метод DataTable.Select для фильтрации строк, которые удовлетворяют условию. Вы можете прочитать подробнее here. Для использования фильтров см. here.

+0

Я пробовал метод datatable.select и хотел, но это не возвращает никаких строк? позвольте мне проверить ваши ссылки – CodeMan

0

Я думаю, что это может помочь: DataTable Select Implementation with Multiple AND Conditions (2 и 3-d комментарии)

IEnumerable<DataRow> rows = myDataTable.AsEnumerable() 
.Where(r => r.Field<string>("Field2") == term2 
     && r.Field<string>("Field3") == term3 
     && r.Field<string>("Field1").Contains(term1)); 

DataRow [] results = myDataTable 
.Select("Field3 = '" + term3+ "'") 
.Select("Field2 = '" + term2 + "'") 
.Select("Field1 LIKE '*" + term1 + "*'"); 
Смежные вопросы