В C# / ASP.NET 3.5 у меня есть DataTable, который извлекает строки из базы данных. Я хочу динамически применить фильтр сортировки к таблице данных (может быть просмотр данных), а затем выполнить цикл по «строкам» отсортированных данных, чтобы использовать каждую строку для некоторых показателей.
Я бы очень предпочел не попадать в базу данных каждый раз, чтобы выполнить настраиваемую сортировку, но я не уверен, как получить отсортированную таблицу данных из исходной таблицы данных.
Я уверен, что забываю / упускаю что-то простое, но не помню, как это сделать!
Я хочу сделать это в «отсортированном» списке. В настоящее время он делает это в связанном списке из моего запроса.
foreach (DataRow dr in dtTags.Rows)
{
LinkButton lbTag = new LinkButton();
lbTag.CssClass = "UserTagNoHover";
lbTag.ID = "hlUserTag" + dr["UserTagRID"].ToString();
lbTag.Text = dr["Name"].ToString();
//lbTag.Click += new System.EventHandler(this.Tag_OnClick);
lbTag.CommandName = "User_Click";
lbTag.CommandArgument = "hlUserTag" + dr["UserTagRID"].ToString();
lbTag.ToolTip = "Total uses: " + dr["TotalCount"].ToString();
Boolean bAlreadyExists = false;
foreach (LinkButton lbTest in pnlTags.Controls)
{
if (lbTest.ID == lbTag.ID)
{
bAlreadyExists = true;
}
}
if (bAlreadyExists == false)
{
pnlTags.Controls.Add(lbTag);
}
}





Функция DataTable.Select () делает именно то, что вам кажется. Его второй параметр String - это строка сортировки, синтаксис которой такой же, как у SQL: [Название столбца] ASC, [Другое название столбца] DESC и т. д.
Лично я предпочитаю использовать LINQ там, где он доступен.
Это идеально! Уже реализовано. Спасибо за прекрасный ответ.
DataTable table = ...
DataView view = table.DefaultView;
view.Sort = ...
view.RowFilter = ...
Учитывая, что вы используете .NET 3.5, я бы использовал LINQ to DataSet. Это лучше со строго типизированными таблицами данных, но:
var rows = from row in dataTable.AsEnumerable()
orderby row.Field<int>("Age") // or whatever
select new
{
UserTagID = row.Field<string>("UserTagID"),
TotalCount = row.Field<int>("TotalCount")
// etc
};
Тогда вы можете перебирать строки гораздо более простым способом - по крайней мере, на мой взгляд.
Можете ли вы опубликовать код, чтобы мы могли видеть, с чем вы работаете?