59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Web.Mvc;
|
|
|
|
namespace Kreta.Web.Helpers.Extension
|
|
{
|
|
public static class DataSetExtensions
|
|
{
|
|
public static List<SelectListItem> CreateMvcGroupedSelectListItem(this DataSet ds, string keyColumn, string valueColumn, string groupNamesColumn, string groupOrderColumn = null)
|
|
{
|
|
DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null;
|
|
if (dt == null)
|
|
{
|
|
return new List<SelectListItem>();
|
|
}
|
|
EnumerableRowCollection<DataRow> dataRowList = dt.AsEnumerable();
|
|
if (!string.IsNullOrWhiteSpace(groupOrderColumn))
|
|
{
|
|
dataRowList = dataRowList.OrderBy(x => x.Field<int>(groupOrderColumn));
|
|
}
|
|
var groups = dataRowList
|
|
.GroupBy(x => x.Field<string>(groupNamesColumn))
|
|
.Select(group => new KeyValuePair<string, SelectListGroup>(group.Key, new SelectListGroup { Name = group.Key }))
|
|
.ToDictionary(item => item.Key, item => item.Value);
|
|
|
|
var result = dt.Rows
|
|
.Cast<DataRow>()
|
|
.Select(item => new SelectListItem
|
|
{
|
|
Group = groups[item.Field<string>(groupNamesColumn)],
|
|
Text = item.Field<string>(valueColumn),
|
|
Value = item.Field<int>(keyColumn).ToString()
|
|
})
|
|
.ToList();
|
|
return result;
|
|
}
|
|
|
|
public static List<SelectListItem> CreateMvcSelectListItem(this DataSet ds, string keyColumn, string valueColumn)
|
|
{
|
|
DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null;
|
|
if (dt == null)
|
|
{
|
|
return new List<SelectListItem>();
|
|
}
|
|
EnumerableRowCollection<DataRow> dataRowList = dt.AsEnumerable();
|
|
|
|
var result = dt.Rows
|
|
.Cast<DataRow>()
|
|
.Select(item => new SelectListItem
|
|
{
|
|
Text = item.Field<string>(valueColumn),
|
|
Value = item.Field<int>(keyColumn).ToString()
|
|
})
|
|
.ToList();
|
|
return result;
|
|
}
|
|
}
|
|
}
|