1。listView1.Items[index].Selected=true;可以定位选择某一行,但这行被选中后为灰色,并不是单击listview时那样显示为深蓝色,如何使定位时的颜色为深蓝色。
2.我将listview中的第一列隐藏,如何能防止用户不把第一列拖出来(要代码),这种情况在网上看到很多,但都没有解决,只是浅浅的说了几句。请高手指教
3.左面是树,单击一个结点右边出现listview(里面填充一个表中的数据),单击listview列进行列排序,这时没有问题。
单击另一个结点,右边出现listview(里面填充另一个表中的数据),单击listview列进行列排序,这时提示索引超出范围,这两个listview是同一个listview,而且单击树的不同结点时有的listview显示Details,有的显示largeicon(也就是叶子结点下对应Details,其它结点对应largeicon),我感觉应该是内部比较器IComparer的问题,代码如下:
private int iColumn=0;
private bool iOrder=false;
private void MyListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(iColumn==e.Column)
{
iOrder=!iOrder;
}
else
{
iOrder=true;
}
MyListView.Sorting=iOrder?SortOrder.Ascending:SortOrder.Descending;
MyListView.Sort();
MyListView.ListViewItemSorter=new ListViewItemComparer(e.Column,MyListView.Sorting);
iColumn=e.Column;
}
class ListViewItemComparer : IComparer
{
private int col;
private SortOrder _order;
public ListViewItemComparer()
{
col=0;
this._order=SortOrder.Ascending;
}
public ListViewItemComparer(int column,SortOrder order)
{
col=column;
this._order=order;
}
public int Compare(object x, object y)
{
int returnVal=-1;
returnVal=String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
if(_order==SortOrder.Descending)
{
returnVal *=-1;
}
return returnVal;
}
}
请问如何解决?
2.我将listview中的第一列隐藏,如何能防止用户不把第一列拖出来(要代码),这种情况在网上看到很多,但都没有解决,只是浅浅的说了几句。请高手指教
3.左面是树,单击一个结点右边出现listview(里面填充一个表中的数据),单击listview列进行列排序,这时没有问题。
单击另一个结点,右边出现listview(里面填充另一个表中的数据),单击listview列进行列排序,这时提示索引超出范围,这两个listview是同一个listview,而且单击树的不同结点时有的listview显示Details,有的显示largeicon(也就是叶子结点下对应Details,其它结点对应largeicon),我感觉应该是内部比较器IComparer的问题,代码如下:
private int iColumn=0;
private bool iOrder=false;
private void MyListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(iColumn==e.Column)
{
iOrder=!iOrder;
}
else
{
iOrder=true;
}
MyListView.Sorting=iOrder?SortOrder.Ascending:SortOrder.Descending;
MyListView.Sort();
MyListView.ListViewItemSorter=new ListViewItemComparer(e.Column,MyListView.Sorting);
iColumn=e.Column;
}
class ListViewItemComparer : IComparer
{
private int col;
private SortOrder _order;
public ListViewItemComparer()
{
col=0;
this._order=SortOrder.Ascending;
}
public ListViewItemComparer(int column,SortOrder order)
{
col=column;
this._order=order;
}
public int Compare(object x, object y)
{
int returnVal=-1;
returnVal=String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
if(_order==SortOrder.Descending)
{
returnVal *=-1;
}
return returnVal;
}
}
请问如何解决?
http://www.syncfusion.com/FAQ/WindowsForms/Default.aspx
listView1.Items[index].Selected=true;
之后加上
listView1.Focus();
即可。
怎么用listviewitem的tag属性来代替这一列。
隐藏那一列是表的主键,想单击listview得到主键的值,以便其它操作,而且不想让用户看到这一列
隐藏那一列是表的主键,想单击listview得到主键的值,以便其它操作,而且不想让用户看到这一列你在创建column的时候,不要创建这一列,然后
添加的时候如下操作,
ListViewItem itmNew = yourListView.Items.Add( FirstColValue );
itmNew.Tag = yourKeyValue;//Save key value using "Tag" property.//Get its value
ListViewItem itmCurrent = yourListView.Items[index];
//Get its key value through "itmCurrent.Tag" property
还有比如ListViewItem item=listView1.SelectedItems[0];
如何根据item,定位它在listview中的位置
比如item是第5行,刷新listview后,它跑到第一行中,int nIndex = yourListView.Items.IndexOf( yourItem );这个索引就定不到它了吧
比如item是第5行,刷新listview后,它跑到第一行中,int nIndex = yourListView.Items.IndexOf( yourItem );这个索引就定不到它了吧怎么做的刷新?重新创建?
那你需要做foreach来查找。
private void Addlistview()
{
listView1.Items.Clear();
int a=0;
DataRow[] DR=StuDS.sldrpurplan.Select("defineprjid='"+SysInfo.ProjID+"'","MOrgTime DESC");
foreach(DataRow dr in DR)
{
if(dr.RowState.ToString()!="Deleted") //判断数据集中的行是否在删除的状态
{
listView1.Items.Add(dr["MPurPlanId"].ToString()); //
listView1.Items[a].SubItems.Add(dr["PurTitle"].ToString()); //
listView1.Items[a].SubItems.Add(dr["Material"].ToString()); //
listView1.Items[a].SubItems.Add(dr["MateSpec"].ToString()); //
listView1.Items[a].SubItems.Add(dr["ItemName"].ToString()); //
listView1.Items[a].SubItems.Add(dr["MQuantity"].ToString()); //
listView1.Items[a].SubItems.Add(dr["MOrganizer"].ToString()); //
listView1.Items[a].SubItems.Add(Convert.ToDateTime(dr["MOrgTime"]).ToLongDateString()); //
listView1.Items[a].SubItems.Add(dr["MTaster"].ToString()); //
a++;
}
}
}
{
foreach( ListViewItem itm in yourListView.Items )
{
if( itm.Text == itmSearched.Text )
return itmSearched.Index;
}
return -1;//Can't find it
}
Addlistview();
foreach( ListViewItem itm in listView1.Items)
{
if( itm.Text == item.Text )
{
listView1.Focus();
listView1.Items[item.Index].Selected =true;
}
}
还是找不到索引
foreach( ListViewItem itm in listView1.Items)
{
if( itm.Text == item.Text )
{
listView1.Focus();
listView1.Items[item.Index].Selected =true;
}
}
值 为 -1
foreach( ListViewItem itm in listView1.Items)
{
if( itm.Text == item.Text )
{
listView1.Focus();
listView1.Items[itm.Index].Selected =true;
}
}
我的第二个问题我自己再研究一下
结贴了,谢谢