调整的ListView列以适合的WinForms [英] Adjust ListView columns to fit with WinForms

查看:186
本文介绍了调整的ListView列以适合的WinForms的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的ListView列的面孔调整大小的问题。如果你的锚/对接列表视图正常的winform比ListView的锚或对接效果很好。我的意思是列表视图将调整和适合的WinForms为最大化的WinForms,但你设计它的列这是不符合的ListView调整。

我的问题是:有什么办法来调整列表视图的列列表视图与适合的winform大小

列表视图设计code:

 私人无效Form1_Load的(对象发件人,EventArgs的发送)
    {        listView1.View = View.Details;
        listView1.LabelEdit = TRUE;
        listView1.BackColor = Color.GreenYellow;
        listView1.Columns.Add(日期,100,Horizo​​ntalAlignment.Left);
        listView1.Columns.Add(TRANSID,50,Horizo​​ntalAlignment.Left);
        listView1.Columns.Add(券,100,Horizo​​ntalAlignment.Right);
        listView1.Columns.Add(个别,300,Horizo​​ntalAlignment.Left);
        listView1.Columns.Add(定金,100,Horizo​​ntalAlignment.Right);
        listView1.Columns.Add(撤退,100,Horizo​​ntalAlignment.Right);        字符串connstr =服务器=;初始目录=数据库; UID = UID; PWD = PWD;
        SqlConnection的CON =新的SqlConnection(connstr);
        con.Open();
        listView1.Items.Clear();
        listView1.Refresh();
        字符串SQL =选择日期=转换(VARCHAR,日期,103),TRANSID,MAX(详情)的资料,和(存款)作为定金,SUM(撤)为撤离,凭证从debank组按日期,TRANSID,券 ;
        CMD的SqlCommand =新的SqlCommand(SQL,CON);
        SqlDataAdapter的DAP =新SqlDataAdapter的(CMD);
        DataSet的DS =新的DataSet();
        dap.Fill(DS);
        DataTable的DT = ds.Tables [0];        的for(int i = 0; I< dt.Rows.Count;我++)
        {
            DataRow的博士= dt.Rows [I]
            ListViewItem的LVI =新的ListViewItem(DR [日]的ToString());
            lvi.SubItems.Add(博士[TRANSID]的ToString());
            lvi.SubItems.Add(博士[券]的ToString());
            lvi.SubItems.Add(博士[细节]的ToString());
            lvi.SubItems.Add(DR [存款]的ToString());
            lvi.SubItems.Add(DR [撤退]的ToString());
            listView1.Items.Add(LVI);
            listView1.FullRowSelect = TRUE;        }        SizeLastColumn(ListView1的);
    }


解决方案

  1. 中编程之一。你必须保持它code。

  2. 您可以在列表视图中调整最后一列的大小,这样它会自动调整大小。
    网样本:


  

在ListView控件,用视图
  属性设置为详细信息,可以
  创建一个多列输出。
  有时候,你会想最后
  在ListView自身大小的列
  为占用所有剩余空间。您
  可以通过设置栏要这样做
  宽度魔法值-2。


  
  

在下面的例子中,名称
  ListView控件是lvSample:


  [C#]
私人无效Form1_Load的(对象发件人,发送System.EventArgs)
{
    SizeLastColumn(lvSample);
}私人无效listView1_Resize(对象发件人,发送System.EventArgs)
{
    SizeLastColumn((ListView控件)发送者);
}私人无效SizeLastColumn(ListView的LV)
{
    lv.Columns [lv.Columns.Count - 1] .WIDTH = -2;
}

编辑:

Programaticaly你可以做到这一点与自己的实现算法。问题是,列表视图不知道你想调整和什么不列是什么。所以,你必须在调整大小的方法(或resizeEmd方法)来指定所有列的大小变化。所以你计算列表视图的所有宽度,然后除以proportionaly所有列的值。
你列的宽度多为50。所以,你有15 *х整个ListView的宽度(默认状态X = 50。我计算根据您的列及其宽度的15号值)常规单位。当窗体大小,就可以计算出新的 X = ListView.Width / 15 ,然后设置每列的宽度所需要的价值,因此

 私人无效SizeLastColumn(ListView的LV)
{
 INT X = lv.Width / 15 == 0? 1:lv.Width / 15;
 lv.Columns [0] .WIDTH = X * 2;
 lv.Columns [1] .WIDTH = X;
 lv.Columns [2] .WIDTH = X * 2;
 lv.Columns [3] .WIDTH = X * 6;
 lv.Columns [4] .WIDTH = X * 2;
 lv.Columns [5] .WIDTH = X * 2;
}

I have face resize problem of listview columns. If you anchor/docking the listview to normal winform than the listview anchor or docking works well. I mean listview will resize and fit to winforms as winforms maximized but the columns you have designed on it which is not resize with listview.

My question is : Is there any way to resize the columns of listview with listview to fit winform size?.

Listview Design Code:

 private void Form1_Load(object sender, EventArgs e)
    {

        listView1.View = View.Details;
        listView1.LabelEdit = true;
        listView1.BackColor = Color.GreenYellow;
        listView1.Columns.Add("Date", 100, HorizontalAlignment.Left);
        listView1.Columns.Add("TransID", 50, HorizontalAlignment.Left);
        listView1.Columns.Add("voucher", 100, HorizontalAlignment.Right);
        listView1.Columns.Add("particulars", 300, HorizontalAlignment.Left);
        listView1.Columns.Add("deposit", 100, HorizontalAlignment.Right);
        listView1.Columns.Add("withdrawal", 100, HorizontalAlignment.Right);

        string connstr = "server=.;initial catalog=DataBase;uid=UID;pwd=PWD";
        SqlConnection con = new SqlConnection(connstr);
        con.Open();
        listView1.Items.Clear();
        listView1.Refresh();
        string sql = "select date=convert(varchar,date,103),transID,max(particulars)as particulars,sum(deposit)as deposit,sum(withdrawal) as withdrawal,voucher from debank group by date,transID,voucher";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataAdapter dap = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        DataTable dt = ds.Tables[0];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow dr = dt.Rows[i];
            ListViewItem lvi = new ListViewItem(dr["date"].ToString());
            lvi.SubItems.Add(dr["transID"].ToString());
            lvi.SubItems.Add(dr["voucher"].ToString());
            lvi.SubItems.Add(dr["particulars"].ToString());
            lvi.SubItems.Add(dr["deposit"].ToString());
            lvi.SubItems.Add(dr["withdrawal"].ToString());
            listView1.Items.Add(lvi);
            listView1.FullRowSelect = true;

        }

        SizeLastColumn(listView1);


    }

解决方案

  1. Programatic one. You'll have to maintain it in code.
  2. You can adjust last column size in your listview so that it would be automatically resized. Net sample:

In a ListView control, with the View property set to Details, you can create a multi-column output. Sometimes you will want the last column of the ListView to size itself to take up all remaining space. You can do this by setting the column width to the magic value -2.

In the following example, the name of the ListView control is lvSample:

[c#]
private void Form1_Load(object sender, System.EventArgs e)
{
    SizeLastColumn(lvSample);
}

private void listView1_Resize(object sender, System.EventArgs e)
{
    SizeLastColumn((ListView) sender);
}

private void SizeLastColumn(ListView lv)
{
    lv.Columns[lv.Columns.Count - 1].Width = -2;
}

EDIT:

Programaticaly you can do that with own implemented algorithm. The problem is that the list view does not know what of the columns you would like to resize and what not. So you'll have in the resize method (or in resizeEmd method) to specify all the columns size change. So you calculate all the width of the listview then proportionaly divide the value between all columns. Your columns width is multiple to 50. So you have the whole listview width of 15*х (x=50 in default state. I calculated 15 value based on number of your columns and their width) conventional units. When the form is resized, you can calculate new x = ListView.Width/15 and then set each column width to needed value, so

private void SizeLastColumn(ListView lv)
{
 int x = lv.Width/15 == 0 ? 1 : lv.Width/15;
 lv.Columns[0].Width = x*2; 
 lv.Columns[1].Width = x;
 lv.Columns[2].Width = x*2;
 lv.Columns[3].Width = x*6;
 lv.Columns[4].Width = x*2;
 lv.Columns[5].Width = x*2;
}

这篇关于调整的ListView列以适合的WinForms的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆