1.先说书吧,两本我都看过,全是APRESS出版社的,感觉APRESS的书比O'REILLY结构更清晰,作者可全是微软MPV啊,
第二本绝对是winfoms的经典,在Amazon中很受好评,MATTHEW MACDONALD也是我的偶像,呵呵,这本书214页详细介绍ListView。还有推荐你看此书前学一学SQL,因为在Data Binding那几章频繁用到SQL语句。
第一本其实也不错,但不太适合新手,还有这本书有些地方不太合理,比如介绍Appdomain和MSIL,MSDN也不过几页,而他却大篇幅介绍,也些没必要。还有在在讲到多线程,没有提到NET 2中很有用的一个类:BackgroundWorker,总之。不适合新手,属于reference。
2.以下是控件代码,复制到你工程的namespace里,可直接在VS左侧Toolbox中拖放至窗体,取名Xshow。
class Xshow : ListView
{
public event EventHandler<DragEventArgs> XDragDrop;
public Xshow()
: base()
{
base.AllowDrop = true;
base.View = View.Details;
base.FullRowSelect = true;
base.ColumnClick += new ColumnClickEventHandler(Xshow_ColumnClick);
base.DragEnter += new DragEventHandler(Xshow_DragEnter);
base.DragDrop += new DragEventHandler(Xshow_DragDrop);
Columns.Add("Path",500);
}
class SortType : IComparer
{
int _subcolIdx;
bool _descending;
public int SubcolIdx
{
get { return _subcolIdx; }
set { _subcolIdx = value; }
}
public bool Descending
{
get { return _descending; }
set { _descending = value; }
}
public SortType(int subcolIdx)
{
_subcolIdx = subcolIdx;
_descending = false;
}
public int Compare(object a, object b)
{
ListViewItem x, y;
if (_descending) { x = (ListViewItem)b; y = (ListViewItem)a; }
else { x = (ListViewItem)a; y = (ListViewItem)b; }
//SubItems[0] == item in first row, SubItems[1]=first subitem
return String.Compare(x.SubItems[_subcolIdx].Text, y.SubItems[_subcolIdx].Text);
}
}
void Xshow_DragDrop(object sender, DragEventArgs e)
{
string[] ss = (string[])e.Data.GetData(DataFormats.FileDrop);
BeginUpdate();
foreach (string s in ss)
{
Items.Add(s);
}
EndUpdate();
//add your own Event Handler
XDragDrop(this, e);
}
void Xshow_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
else e.Effect = DragDropEffects.None;
}
void Xshow_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (Items.Count <= 1) return;
SortType st = ListViewItemSorter as SortType;
if (st == null) ListViewItemSorter = new SortType(e.Column);
else
{
st.Descending = !st.Descending; st.SubcolIdx = e.Column;
}
Sort();
}
}
温馨提示:内容为网友见解,仅供参考