有关组件的问题? 做一个组件,它继承于ListView控件,实现如下的特殊功能,当点击列表字段时重新按此字段进行数据源排序,怎么做?大家讲一下思路? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private System.Windows.Forms.ContextMenuStrip Save; private System.Windows.Forms.ToolStripMenuItem saveas; public DEGrid() { InitializeComponent(); Save = new ContextMenuStrip(); saveas = new ToolStripMenuItem("Save as"); saveas.Font = Consts.MyFont; saveas.Click += new EventHandler(saveas_Click); Save.Items.Add(saveas); this.ContextMenuStrip = Save; } void saveas_Click(object sender, EventArgs e) { OperationGrid opg = new OperationGrid(this); opg.SaveAsExcel(); }这是我封装的鼠标右键操作.你可以封装成鼠标左键的,在saveas_Click方法里写排序操作 //以下代码示例完整来自于MSDN本地帮助的一个关于ListView的排序示例,一起学习;不过这不Winform是 XAML程序(ListView,个人感觉比较复杂,我都很少用它)using System;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using System.Collections;using System.Windows.Controls.Primitives;using System.ComponentModel;using System.Windows.Data;namespace ListViewSort{ /// <summary> /// Interaction logic for Window1.xaml /// </summary> //<Snippet6> public partial class Window1 : Window { public Window1() { InitializeComponent(); } GridViewColumnHeader _lastHeaderClicked = null; ListSortDirection _lastDirection = ListSortDirection.Ascending; void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e) { GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader; ListSortDirection direction; if (headerClicked != null) { if (headerClicked.Role != GridViewColumnHeaderRole.Padding) { if (headerClicked != _lastHeaderClicked) { direction = ListSortDirection.Ascending; } else { if (_lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } else { direction = ListSortDirection.Ascending; } } string header = headerClicked.Column.Header as string; Sort(header, direction); if (direction == ListSortDirection.Ascending) { headerClicked.Column.HeaderTemplate = Resources["HeaderTemplateArrowUp"] as DataTemplate; } else { headerClicked.Column.HeaderTemplate = Resources["HeaderTemplateArrowDown"] as DataTemplate; } // Remove arrow from previously sorted header if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked) { _lastHeaderClicked.Column.HeaderTemplate = null; } _lastHeaderClicked = headerClicked; _lastDirection = direction; } } } //</Snippet6> //<Snippet5> private void Sort(string sortBy, ListSortDirection direction) { ICollectionView dataView = CollectionViewSource.GetDefaultView(lv.ItemsSource); dataView.SortDescriptions.Clear(); SortDescription sd = new SortDescription(sortBy, direction); dataView.SortDescriptions.Add(sd); dataView.Refresh(); } //</Snippet5> }} 水晶报表数字分隔符的问题 散分 自己用C#编的一个MTV播放器 顺便祝大家五一快乐 一个关于XML+XSL显示图片的问题 一个按钮点鸡事件代码有300多行??郁闷请指点一下。。顶者有分 求助:画椭圆的方法 可可西里的烦恼! [winform]如何刷新一个Form??? 懂态生成树后!要怎么样吧树回存回数据库中? 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。 C#如何获得与VB相同的Ascii码值??? 如何显示行标 帮忙写个回调的方法
private System.Windows.Forms.ToolStripMenuItem saveas;
public DEGrid()
{
InitializeComponent();
Save = new ContextMenuStrip();
saveas = new ToolStripMenuItem("Save as");
saveas.Font = Consts.MyFont;
saveas.Click += new EventHandler(saveas_Click);
Save.Items.Add(saveas);
this.ContextMenuStrip = Save;
}
void saveas_Click(object sender, EventArgs e)
{
OperationGrid opg = new OperationGrid(this);
opg.SaveAsExcel();
}这是我封装的鼠标右键操作.你可以封装成鼠标左键的,在saveas_Click方法里写排序操作
一起学习;不过这不Winform是 XAML程序
(ListView,个人感觉比较复杂,我都很少用它)using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Collections;
using System.Windows.Controls.Primitives;
using System.ComponentModel;
using System.Windows.Data;namespace ListViewSort
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
//<Snippet6>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
} GridViewColumnHeader _lastHeaderClicked = null;
ListSortDirection _lastDirection = ListSortDirection.Ascending; void GridViewColumnHeaderClickedHandler(object sender,
RoutedEventArgs e)
{
GridViewColumnHeader headerClicked =
e.OriginalSource as GridViewColumnHeader;
ListSortDirection direction; if (headerClicked != null)
{
if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
{
if (headerClicked != _lastHeaderClicked)
{
direction = ListSortDirection.Ascending;
}
else
{
if (_lastDirection == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
} string header = headerClicked.Column.Header as string;
Sort(header, direction); if (direction == ListSortDirection.Ascending)
{
headerClicked.Column.HeaderTemplate =
Resources["HeaderTemplateArrowUp"] as DataTemplate;
}
else
{
headerClicked.Column.HeaderTemplate =
Resources["HeaderTemplateArrowDown"] as DataTemplate;
} // Remove arrow from previously sorted header
if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked)
{
_lastHeaderClicked.Column.HeaderTemplate = null;
}
_lastHeaderClicked = headerClicked;
_lastDirection = direction;
}
}
}
//</Snippet6>
//<Snippet5>
private void Sort(string sortBy, ListSortDirection direction)
{
ICollectionView dataView =
CollectionViewSource.GetDefaultView(lv.ItemsSource); dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
//</Snippet5>
}
}