如何在数据绑定期间自定义datagridview中的数据格式

我正在寻找一种格式化DataGridViewTextBoxColumn的方法,以便在数据绑定期间格式化数据绑定的值。 例如,我有一个CompanyName属性,当数据绑定发生时,我需要从CompanyName获取前5个字母。 我可以挂钩不同的DataGridView事件(例如RowsAdded)并循环遍历所有行并执行操作,但我想找到更复杂的方法来执行此操作。 由于我已决定使用数据绑定,因此循环数据并对其进行修改有点违背了数据绑定概念。 我所追求的是如何做到如下,但添加自定义格式逻辑: dataGridView1.Columns[colSomeDate.Index].DataPropertyName = “SomeDate”; colSomeDate.DefaultCellStyle.Format = “yyyy”; 我想我应该实现IFormatProvider,但我不太明白我应该如何实现它。 dataGridView1.Columns[companyName.Index].DataPropertyName = “CompanyName”; companyName.DefaultCellStyle.FormatProvider = new ShortText(); // ShortText should implement IFormatProvider

WPF用户控件中“DataContext = this”有什么问题?

我在某处读到在用户控件的构造函数中设置DataContext = this是不好的做法(虽然无法找到)。 为什么这是不好的做法? 有什么选择?

如何通过参数化查询在数据库中插入空值

我有一个datetime数据类型: dttm 数据库字段类型也是数据时间 现在我这样做: if (dttm.HasValue) { cmd.Parameters.AddWithValue(“@dtb”, dttm); } else { // It should insert null value into database // through cmd.Parameters.AddWithValue(“@dtb”, _____) } 如何才能做到这一点。

WPF ListView:更改ItemsSource不会更改ListView

我使用ListView控件来显示一些数据行。 有一个后台任务接收列表内容的外部更新。 新接收的数据可能包含更少,更多或相同数量的项目,并且项目本身也可能已更改。 ListView.ItemsSource绑定到OberservableCollection(_itemList),因此对于_itemList的更改也应该在ListView可见。 _itemList = new ObservableCollection(); _itemList.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); L_PmemCombList.ItemsSource = _itemList; 为了避免刷新完整的ListView,我将新检索的列表与当前_itemList进行简单比较,更改不相同的项目,并在必要时添加/删除项目。 集合“newList”包含新创建的对象,因此替换_itemList中的项正确发送“刷新”通知(我可以使用ObservableCollection的事件处理程序OnCollectionChanged进行记录) Action action = () => { for (int i = 0; i replace if changed if (i add items else _itemList.Add(newList[i]); } // new list contains less items -> remove items for (int i = _itemList.Count – 1; […]

可以在后台线程上构造表单,然后在UI线程上显示

更新:只是总结一下我的问题归结为: 我希望构建.NET表单和控件不会创建任何窗口句柄 – 希望该过程被延迟到Form.Show/Form.ShowDialog 任何人都可以确认或否认这是否属实? 我有一个带有选项卡控件的大型WinForms表单,表单上有许多控件,在加载几秒钟后会暂停。 我已经将它缩小到InitializeComponent中设计器生成的代码,而不是构造函数或OnLoad中的任何逻辑。 我很清楚我不能尝试在主UI线程以外的任何线程上与UI进行交互,但我想做的是让应用程序预先加载这个表单(运行构造函数)在后台,所以只要用户想要打开它,它就可以立即在UI线程上显示。 但是,在后台线程中构建时,在设计器的这一行: this.cmbComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; 我收到了错误 在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。 确保您的Main函数标记了STAThreadAttribute。 现在,这是设计器文件的一半,这让我希望通常这种策略可行。 但是这条特殊的线似乎试图立即启动某种OLE调用。 有任何想法吗? 编辑: 我想我在这里并没有说清楚。 延迟似乎发生在设计人员生成的代码期间构建bazillion控件期间。 我希望所有这些初始化代码都是在没有真正尝试触摸任何真正的Win32窗口对象的情况下发生的,因为表单尚未实际显示。 我可以设置(例如)标签文本和位置来自这个后台线程的事实让我希望这是真的。 然而,对于所有房产而言可能并非如此。

C# – 两个日期时间之间的持续时间(分钟)

我需要确定两个DateTimes之间的持续时间(以分钟为单位)。 然而,有一点点扭曲: 排除周末 只计算在上午7:00到下午7:00之间的分钟数。 例如: [09/30/2010 6:39:00 PM] – [09/30/2010 7:39:00 PM] = 21 Minutes 我只是很难想出一个体面的方式来做这件事,如果有人能提出建议,我会很感激。 谢谢。 编辑: 我最终选择了dtb的解决方案。 只有一个特殊情况需要注意:如果结束时间是晚上7点之后,则计算从上午7点到实际结束时间的分钟数。 这是我修改它的方式: var minutes = from day in start.DaysInRangeUntil(end) where !day.IsWeekendDay() let st = Helpers.Max(day.AddHours(7), start) let en = (day.DayOfYear == end.DayOfYear ? end : Helpers.Min(day.AddHours(19), end) ) select (en – st).TotalMinutes; 再一次感谢你的帮助。

“没有找到适合完成此操作的成像组件。”

我编写了一个应用程序,它需要下载* .png文件并将其设置为WPF按钮的背景。 所以,当我运行这个程序时,它面临错误 没有找到适合完成此操作的成像组件。“ 我的代码如下: 第一个应用程序使用WebClient类的对象下载文件: System.Net.WebClient wClient = new System.Net.WebClient(); Uri downloadUri = new Uri(MyUri, UriKind.Absolute); wClient.DownloadFileAsync(downloadUri, “MyImage.png”); wClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wClient_DownloadFileCompleted); 当下载完成事件发生时: ImageBtn.Dispatcher.Invoke(new Action(() => { ImageBrush ib = new ImageBrush(); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.UriSource = new Uri(“MyImage.png”, UriKind.Relative); bi.EndInit(); ib.ImageSource = bi; ImageBtn.Background = ib; } 注意由于在BackgroundWorker中运行这些代码块,我使用Dispatcher来设置按钮Background属性 所以,当我运行程序时, System.NotSupportedException发生如下: […]

使用Moq覆盖同一类中的虚方法

我们使用Moq对我们的服务类进行unit testing,但是他们仍然坚持如何测试服务方法调用同一类的另一个服务方法的情况。 我尝试将被调用的方法设置为虚拟,但仍然无法弄清楚在Moq中要做什么。 例如: public class RenewalService : IRenewalService { //we’ve already tested this public virtual DateTime? GetNextRenewalDate(Guid clientId) { DateTime? nextRenewalDate = null; //… a ton of already tested stuff… return nextRenewalDate; } //but want to test this without needing to mock all //the methods called in the GetNextRenewalDate method public bool IsLastRenewalOfYear(Renewal renewal) […]

如何URL编码周期?

我需要URL编码一些句点,因为我必须传递一些文档路径,就像这样 http://example.com/test.aspx?document=test.docx 因此test.docx导致我出现非法字符错误。 所以我需要把它改成 . –> %2E 我试着使用Server.UrlEncode string b = Server.UrlEncode(“http://example.com/test.aspx?document=test.docx”); 但我明白了 “http%3a%2f%2fexample.com%2ftest.aspx%3fdocument%3dtest.docx” 那么我是否必须像字符串替换一样使用并手动执行并用该代码替换所有句点?

C#从List <List >中删除重复项

例如,我无法想出最有效的算法来从List<List>删除重复项(我知道这看起来像是int[]的列表,但只是为了视觉目的而这样做: my_list[0]= {1, 2, 3}; my_list[1]= {1, 2, 3}; my_list[2]= {9, 10, 11}; my_list[3]= {1, 2, 3}; 所以输出就是 new_list[0]= {1, 2, 3}; new_list[1]= {9, 10, 11}; 如果您有任何想法,请告诉我。 我真的很感激。