using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace LYFZ.ComponentLibrary { public partial class TestListViewEx : UserControl { public TestListViewEx() { InitializeComponent(); } #region 属性 DataTable _Bindtable; /// /// 要绑定数据 /// public DataTable Bindtable { get { return _Bindtable; } set { _Bindtable = value; if (_Bindtable != null && _Bindtable.Rows.Count>0) { DataForLsitViewAdd(); } } } string _ShowColumnsName; /// /// 要显示出来列名标题名,多个列时,中间用“,”号连接 /// 可以是中文,也可以是英文 /// public string ShowColumnsName { get { return _ShowColumnsName; } set { _ShowColumnsName = value; } } string _ShowRowsName; /// /// 要显示出来的DataTable的字段名,多个列时,中间用“,”号连接 /// 必须与DataTable中的列名一致 /// public string ShowRowsName { get { return _ShowRowsName; } set { _ShowRowsName = value; } } string _ShowColumnWhith; /// /// 要显示出来列名Name,多个列时,中间用“,”号连接 /// 可以是中文,也可以是英文 /// public string ShowColumnWhith { get { return _ShowColumnWhith; } set { _ShowColumnWhith = value; } } string _Text; /// /// 选择后返回的值 /// public new string Text { get { return _Text; } set { _Text = value; } } #endregion private void TestListViewEx_Load(object sender, EventArgs e) { //lstviw.View; } private void DataForLsitViewAdd() { lstviw.Columns.Clear(); if (ShowColumnsName != null && ShowColumnsName != "") { if (ShowColumnsName.ToString().LastIndexOf(',') == ShowColumnsName.Length - 1) { ShowColumnsName.Remove(ShowColumnsName.Length - 1, 1); } if (ShowColumnWhith.ToString().LastIndexOf(',') == ShowColumnWhith.Length - 1) { ShowColumnWhith.Remove(ShowColumnWhith.Length - 1, 1); } string[] splitColumnArry = ShowColumnsName.Split(','); string[] splitColumnWhithArry = ShowColumnWhith.Split(','); for (int i = 0; i < splitColumnArry.Length; i++) { if (ShowColumnWhith != null && ShowColumnWhith != "" && splitColumnArry.Length == splitColumnWhithArry.Length) { try { int lvWidth = Convert.ToInt32(splitColumnWhithArry[i].ToString()); lstviw.Columns.Add(splitColumnArry[i].ToString(), lvWidth, HorizontalAlignment.Left); LVSetAllColWidths(lstviw, lvWidth); } catch { int lvWidth = this.Width / splitColumnArry.Length; lstviw.Columns.Add(splitColumnArry[i].ToString(), lvWidth, HorizontalAlignment.Left); LVSetAllColWidths(lstviw, lvWidth); } } else { int lvWidth = this.Width / splitColumnArry.Length; lstviw.Columns.Add(splitColumnArry[i].ToString(), lvWidth, HorizontalAlignment.Left); LVSetAllColWidths(lstviw, lvWidth); } } } if (Bindtable.Rows.Count > 0) { if (ShowRowsName.ToString().LastIndexOf(',') == ShowRowsName.Length - 1) { ShowRowsName.Remove(ShowRowsName.Length - 1, 1); } string[] splitShowRowsNameArry = ShowRowsName.Split(','); for (int i = 0; i < Bindtable.Rows.Count; i++) { ListViewItem item = new ListViewItem(Bindtable.Rows[i][splitShowRowsNameArry[0].ToString()].ToString().Trim()); for (int j = 1; j < splitShowRowsNameArry.Length; j++) { item.SubItems.Add(Bindtable.Rows[i][splitShowRowsNameArry[j].ToString()].ToString().Trim()); } lstviw.Items.Add(item); } LVSetAllColWidths(lstviw); } } [DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); public void LVSetAllColWidths(ListView lv, int lvWidth = 50) { if (lv.Columns.Count >= 0) { for (int i = 1; i < lv.Columns.Count; i++) { SendMessage(lv.Handle, 0x1000 + lvWidth, i - 1, -2);// } //lv.Columns[0].Width = lv.Columns[0].Width + 2; } } private void lstviw_Click(object sender, EventArgs e) { if (lstviw.Items.Count > 0) { int IntLength = lstviw.Columns.Count; Text = ""; //Text += lstviw.Items[lstviw.SelectedItems[0].Index].ToString(); Text += lstviw.Items[0].SubItems[0].Text.Trim(); for (int i = 1; i < lstviw.Columns.Count; i++) { Text += "," + lstviw.Items[0].SubItems[i].Text.Trim(); } } } } }