一个相对简单的问题.我有一个datagridview,它只是显示统计信息.没有编辑/添加/删除行.datagridview绑定到List.我想要实现的是让用户能够对列进行排序.
class Market
{
public int Location {get;set;}
public float Value {get;set;}
//...
}
class City
{
public String Name {get;set;}
//...
}
List<Market> _markets;
List<City> _cities;
//Lists are populated.
dataGridView1.DataSource = _markets.Select(market =>
new { _cities[market.Location].Name, market.Value}).ToList();
Run Code Online (Sandbox Code Playgroud)
正如所料,列不可排序,但显示的信息是您想要的.我的问题是如何根据具有最少复杂和最少代码量的列类型进行DataGridView排序,因为代码将在整个过程中多次使用.
此应用程序用于使用具有视图的数据库.然后这些视图填充DataGridViews.观点仍然存在,因此可能的解决方案可能是:
DataBase.ViewMarketValue temp = new DataBase.ViewMarketValue()
_markets.ForEach(market => temp.AddViewMarketValueRow(_cities[market.Location].Name, market.Value);
dataGridView1.DataSource = temp;
Run Code Online (Sandbox Code Playgroud)
这导致了所需的:具有所有信息的数据网格视图,并且它是可排序的.唯一的问题是在这方面使用视图似乎是错误的.所以我该怎么做?
public static IList<T> ConvertTo<T>(DataTable table)
{
if (table == null)
{
return null;
}
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
rows.Add(row);
}
return ConvertTo<T>(rows);
}
public static T ConvertItem<T>(DataTable table)
{
T obj = default(T);
if (table != null && table.Rows.Count > 0)
{
obj = CreateItem<T>(table.Rows[0]);
}
return obj;
}
public static T CreateItem<T>(DataRow row)
{
T obj = default(T);
if (row != null)
{
obj = Activator.CreateInstance<T>();
Type entityType = typeof(T);
PropertyInfo[] properties …Run Code Online (Sandbox Code Playgroud) 我有一个字典项目如下
Dictionary<string, List<StrikePrice>>
Run Code Online (Sandbox Code Playgroud)
哪里
public class StrikePrice
{
public string Strike { get; private set; }
public string Price { get; private set; }
public StrikePrice(string strike, string price)
{
Strike = strike;
Price = price;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望将这本词典分配到 DataGridView
this.dataGridViewTest.DataSource = listSmiles;
Run Code Online (Sandbox Code Playgroud)
我知道字典不能分配给它,DataSource因为这不是从IList接口派生的.
有什么办法可以将这个字典元素分配给datagrid吗?
我试图绑定DataGrid到WPF中的通用列表.
以下代码导致列表中每行数据的空行(即,如果我有5行,则显示5行,但不显示单元格中的任何数据):
List<DataRow> DataBindingSource = GuestList.Where(row =>
(row.Field<long>("FK_GROUP_ID") == Int64.Parse(cmbGroup.SelectedValue.ToString())) &&
(row.Field<long>("FK_AGE_GROUP_ID") != (int)L_Age_Group.Child))
.ToList();
gvwAddultDetails.ItemsSource = DataBindingSource;
Run Code Online (Sandbox Code Playgroud)
如果我将对象列表转换为a DataTable,它就可以工作(显示数据).例如:
List<DataRow> DataBindingSource = GuestList.Where(row =>
(row.Field<long>("FK_GROUP_ID") == Int64.Parse(cmbGroup.SelectedValue.ToString())) &&
(row.Field<long>("FK_AGE_GROUP_ID") != (int)L_Age_Group.Child))
.ToList();
gvwAdultDetails.ItemsSource = DataBindingSource.CopyToDataTable().DefaultView;
Run Code Online (Sandbox Code Playgroud)
但如果我有List<DataRow>,我怎么把它转换成DataTable?
DataGrid在WPF中绑定到"List" 的最佳实践是什么?
我正在使用电子设备实时数字化波形(每个设备每秒产生大约1000个512字节数组 - 我们有12个设备).我在C#中为这些设备编写了一个客户端,大部分工作正常并且没有性能问题.
但是,该应用程序的一个要求是归档,并且Microsoft SQL Server 2010被强制作为存储机制(在我的控制范围之外).数据库布局非常简单:每台设备每天有一个表("Archive_Dev02_20131015"等).每个表都有一个Id列,一timestamp列,一Data列(varbinary)和20个带有一些元数据的整数列.在Id和上有一个聚集的主键timestamp,以及另一个单独的索引timestamp.我天真的方法是将客户端应用程序中的所有数据排队,然后使用5秒间隔将所有数据插入数据库SqlCommand.
基本机制如下所示:
using (SqlTransaction transaction = connection.BeginTransaction()
{
//Beginning of the insert sql statement...
string sql = "USE [DatabaseName]\r\n" +
"INSERT INTO [dbo].[Archive_Dev02_20131015]\r\n" +
"(\r\n" +
" [Timestamp], \r\n" +
" [Data], \r\n" +
" [IntField1], \r\n" +
" [...], \r\n" +
") \r\n" +
"VALUES \r\n" +
"(\r\n" +
" @timestamp, \r\n" +
" @data, \r\n" + …Run Code Online (Sandbox Code Playgroud) 将匿名类型转换为DataTable的最快方法是什么?
更新: 我想从匿名类型获取并填充DataTable.如果反射是必要的,我怎么能用反射来做呢?
我想将linq查询结果转换为datatable,以便我可以将数据表分配给GridView以在asp页面上显示它.
但是我无法将结果转换为datatable,我没有在我的代码中获取CopyToTable()方法.
请告诉我这里做错了什么?
var gradeData = (from data in oAngieCtxt.prc_ShopInstanceCustomersData(Convert.ToInt32(this.ShopInstanceID), 10000, false)
.Where( row => row.RecievedPoints != "n/a" )
.GroupBy(row => new { row.Name })
.Select(g => new GroupedPoints()
{
Name = g.Key.Name,
TotalPoints = g.Sum(x => Convert.ToDouble(x.RecievedPoints) * (x.Weightage.ToString() == "0.00" ? 1 : Convert.ToDouble(x.Weightage)))
})
select data).ToList();
DataTable dt = gradeData --gradeData.CopyToTable()
Run Code Online (Sandbox Code Playgroud)
注意:可以使用对dataextentions dll的引用.
提前致谢
我如何从List<ComplexObject>a 获得List<string>,假设ComplexObject有两个属性:类型为string的prop1和类型为int的prop2.我有兴趣提取一个List<string>(prop1列表).
举个例子,也许它更清楚.
想象一下,你有List<Country>Country是具有Id和Name的复杂对象.我有兴趣从countryList中提取一个名称列表,其中包含所有名称.
我知道我可以这样做:
List<string> nameList = new List<string>();
foreach (var country in countryList)
{
nameList.Add(country.Name);
}
Run Code Online (Sandbox Code Playgroud)
...但我想知道是否有更简单快捷的方法从countryList中提取nameList.也许与lambda或其他东西.
并且该字符串列表是否可以轻松转换为DataTable?
谢谢.
我是 c# 新手,我想在 Web API 中将模型类对象转换为 DataTable。
模型类
public class Employee_Master_Model
{
public string UserType { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public string Mobile { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public bool IsActive { get; set; }
public int EmployeeId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public async Task<IActionResult> …Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×2
datagridview ×2
datatable ×2
.net-4.0 ×1
asp.net ×1
asp.net-4.0 ×1
asp.net-core ×1
c#-4.0 ×1
data-binding ×1
generics ×1
linq ×1
sorting ×1
sql-server ×1
winforms ×1
wpf ×1