当前位置:编程学习 > C#/ASP.NET >>

C# datagridview 问题

C# 的datagridview   问题,困扰了我好久,不知道怎么弄
现在把问题贴出来,求高手指导!小弟先谢谢了!



问题就是图片里面说的那样,不知道能实现不?行号的话,如果难以实现的话,就算了,
但是   当窗体 载入了以后,datagridview  里面要自动载入数据库的列名,输入完全后
点击“确定”按钮后,插到相应的数据库, 这个功能一定要实现啊,求帮忙啊!!!!
100分送上! --------------------编程问答-------------------- 自己先顶一下,在线等! --------------------编程问答-------------------- 修改你的列名,从数据库取数据到datatable后,这样修改列名
            dt.Columns["USER_ID"].ColumnName = "用户名";
        --------------------编程问答--------------------
引用 2 楼 gefangliang 的回复:
修改你的列名,从数据库取数据到datatable后,这样修改列名
            dt.Columns["USER_ID"].ColumnName = "用户名";

那是竖着的。。。 --------------------编程问答-------------------- 添加combobox列
private void AddComboBoxColumns()
    {
        DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn();
        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingDataSource(ref comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via DataSource property)";
        DataGridView1.Columns.Insert(0, comboboxColumn);

        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingItems(ref comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via Items property)";
        // Tack this example column onto the end.
        DataGridView1.Columns.Add(comboboxColumn);
    }

    private static void SetAlternateChoicesUsingItems(
        ref DataGridViewComboBoxColumn comboboxColumn)
    {
        {
            comboboxColumn.Items.AddRange(
                new string[] { "Mr.", "Ms.", "Mrs.", "Dr." });
        }
    }

    private DataGridViewComboBoxColumn CreateComboBoxColumn()
    {
        DataGridViewComboBoxColumn column =
            new DataGridViewComboBoxColumn();
        {
            column.DataPropertyName = ColumnName.TitleOfCourtesy.ToString();
            column.HeaderText = ColumnName.TitleOfCourtesy.ToString();
            column.DropDownWidth = 160;
            column.Width = 90;
            column.MaxDropDownItems = 3;
            column.FlatStyle = FlatStyle.Flat;
        }
        return column;
    }

    private void SetAlternateChoicesUsingDataSource(ref DataGridViewComboBoxColumn comboboxColumn)
    {
        {
            comboboxColumn.DataSource = RetrieveAlternativeTitles();
            comboboxColumn.ValueMember = ColumnName.TitleOfCourtesy.ToString();
            comboboxColumn.DisplayMember = comboboxColumn.ValueMember;
        }
    }

--------------------编程问答-------------------- 设置列宽度就可以改列的横和竖了。
自动行号
 法一
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)

        {
            SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
            e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView1.DefaultCellStyle.Font, b,                                  e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);

        }
法二
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{if (e.ColumnIndex == -1 && e.RowIndex >= 0 && e.RowIndex < dataGridView1.Rows.Count)
{//dataGridView1.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex).ToString();
   e.PaintBackground(e.ClipBounds, true);
  e.Graphics.DrawString((e.RowIndex + 1).ToString(), Font, Brushes.Black, e.CellBounds.Left + 6,
  e.CellBounds.Top + 5);
  e.Handled = true;
 }
}

--------------------编程问答-------------------- 自动行号插入到数据库中就没必要了,没见过这么做的
设置每页行数,其他的就是空白了,
属性 RowCount=你的行数 --------------------编程问答-------------------- 第一次帮人,自己实现的一个datagridview扩展,别名楼上已经解决了,
Combox网上资料多,比如http://download.csdn.net/detail/slyzly/2756792,
自己的一段代码,发给你,几个变量自己搞定就可以了。dgvScanItems为datagridiew, 里面有一个占位用的colPolarity列,Polarity为枚举,自己加上就ok了。

            #region 初始化扫描极性列

            var indexOfPolarity = colPolarity.DisplayIndex;
            this.dgvScanItems.Columns.Remove(colPolarity);
            DataTable dtPolarity = new DataTable();
            dtPolarity.Columns.Add("Polarity", typeof(int));
            dtPolarity.Columns.Add("PolarityName", typeof(string));
            foreach (int index in Enum.GetValues(typeof(Polarity)))
            {
                dtPolarity.Rows.Add(index, Enum.GetName(typeof(Polarity), index));
            }
            colPolarity2 = new DataGridViewComboBoxColumn
                               {
                                   Name = colPolarity.Name,
                                   DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton,
                                   DisplayIndex = indexOfPolarity,
                                   HeaderText = colPolarity.HeaderText,
                                   FillWeight = colPolarity.FillWeight,
                                   DataPropertyName = "Polarity",
                                   DataSource = dtPolarity,
                                   DisplayMember = "PolarityName",
                                   ValueMember = "Polarity"
                               };

            this.dgvScanItems.Columns.Add(colPolarity2);

            #endregion
--------------------编程问答--------------------

    /// <summary>
    /// DataGirdView扩展
    /// </summary>
    public class DataGridViewEx : Skyray.Controls.DataGridViewW
    {
        #region 共有属性
        /// <summary>
        /// 显示行号
        /// </summary>
        [Browsable(true)]
        [Category("Misc")]
        [Description("显示行号")]
        [DefaultValue(false)]
        public bool ShowLineNumber { get; set; }

        /// <summary>
        /// 行号起始值,默认从1开始
        /// </summary>
        [Description("行号的起始值")]
        [DefaultValue(1)]
        public Int32 LineNumberBase { get; set; }
        /// <summary>
        /// 自动保存上次配置记录(包括位置,显示与隐藏)
        /// </summary>
        [Browsable(true)]
        [Description("自动保存上次的配置")]
        [DefaultValue(false)]
        [Category("Misc")]
        public Boolean AutoSaveLastConfig { get; set; }
        /// <summary>
        /// 自动弹出列头的显示隐藏栏
        /// </summary>
        [Browsable(true)]
        [Description("自动保存上次的配置")]
        [DefaultValue(false)]
        [Category("Misc")]
        public Boolean AutoColumnHeaderContextMenu { get; set; }
        /// <summary>
        /// 保存配置
        /// </summary>
        [Browsable(true)]
        [Description("保存的配置文件名称")]
        [DefaultValue("Config")]
        [Category("Misc")]
        public String CfgFile
        {
            get
            {
                return _CfgFile;
            }
            set
            {
                if (value.IndexOfAny(Path.GetInvalidFileNameChars()) < 0)
                {
                    _CfgFile = value;
                }
            }
        }
        /// <summary>
        /// 配置文件名称
        /// </summary>
        private string FilenameCfg
        {
            get
            {
                return Path.Combine(Application.StartupPath, CfgFile);
            }
        }
        #endregion

        #region 私有字段
        /// <summary>
        /// 菜单栏
        /// </summary>
        private ContextMenuStrip _ToolStripMenuItem = new ContextMenuStrip();

        /// <summary>
        /// 标识显示序号改变时是否改变保存
        /// </summary>
        private Boolean ChangedIndex = false;

        private String _CfgFile = "Config";

        #endregion

        #region 构造器
        /// <summary>
        /// 构造器
        /// </summary>
        public DataGridViewEx()
        {
            ShowLineNumber = false;
            CfgFile = "Config";
            LineNumberBase = 1;
        }
        #endregion

        #region 继承方法
        protected override void OnColumnNameChanged(DataGridViewColumnEventArgs e)
        {
            LoadConfig();
            base.OnColumnNameChanged(e);
        }

        protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
        {
            if (!ShowLineNumber)
            {
                base.OnCellPainting(e);
            }
            else
            {
                if (e.RowIndex >= 0
                    && e.ColumnIndex < 0)
                {
                    e.Paint(e.ClipBounds, DataGridViewPaintParts.All);
                    var cell = e.CellBounds;
                    cell.Inflate(-2, -2);
                    TextRenderer.DrawText(e.Graphics, (e.RowIndex + LineNumberBase).ToString(CultureInfo.InvariantCulture),
                         e.CellStyle.Font, cell, e.CellStyle.ForeColor, e.CellStyle.BackColor,
                         TextFormatFlags.Right | TextFormatFlags.VerticalCenter);
                    e.Handled = true;
                }
                else
                {
                    base.OnCellPainting(e);
                }
            }
        }

        protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
        {
            if (AutoColumnHeaderContextMenu
                && e.Button == System.Windows.Forms.MouseButtons.Right
                && e.RowIndex < 0) //列头点击时,如果为左键,则tan
            {
                _ToolStripMenuItem.Items.Clear();
                foreach (DataGridViewColumn dgvc in Columns)
                {
                    var colName = dgvc.Name;
                    var tsi = new ToolStripMenuItem();
                    tsi.Text = dgvc.HeaderText;
                    tsi.Checked = dgvc.Visible;
                    tsi.CheckOnClick = true;
                    tsi.CheckedChanged += (object sender, EventArgs e2) =>
                    {
                        this.Columns[colName].Visible = tsi.Checked;
                        if (AutoSaveLastConfig)
                        {
                            SaveConfig();
                        }
                    };
                    Boolean allowChange = false;
                    if (dgvc is IDataGridViewColumnEx)
                    {
                        allowChange = (dgvc as IDataGridViewColumnEx).AllowChangeVisible;
                    }
                    if (allowChange)
                    {
                        _ToolStripMenuItem.Items.Add(tsi);
                    }
                }
                _ToolStripMenuItem.Show(Control.MousePosition);
            }
            else
            {
                base.OnCellMouseDown(e);
            }
        }

        protected override void OnMouseUp(MouseEventArgs e)
        {
            if (ChangedIndex)
            {
                SaveConfig();
            }
            ChangedIndex = false;
            base.OnMouseUp(e);
        }

        protected override void OnColumnDisplayIndexChanged(DataGridViewColumnEventArgs e)
        {
            ChangedIndex = true;
            base.OnColumnDisplayIndexChanged(e);
        }
        #endregion

        #region 私有方法
        private void SaveConfig()
        {
            if (!AutoSaveLastConfig)
                return;
            var xmlSetting = new XmlWriterSettings
            {
                Indent = true,
                NewLineChars = Environment.NewLine,
                Encoding = System.Text.Encoding.UTF8
            };

            using (var tw = XmlWriter.Create(FilenameCfg, xmlSetting))
            {
                tw.WriteStartDocument();
                tw.WriteStartElement("Config");
                foreach (DataGridViewColumn dgvc in Columns)
                {
                    tw.WriteStartElement("CfgColumn");
                    tw.WriteAttributeString("Name", dgvc.Name);
                    tw.WriteAttributeString("Visible", dgvc.Visible.ToString());
                    tw.WriteAttributeString("Index", dgvc.DisplayIndex.ToString());
                    bool allowChangeVisible = false;
                    if (dgvc is IDataGridViewColumnEx)
                    {
                        allowChangeVisible = (dgvc as IDataGridViewColumnEx).AllowChangeVisible;
                    }
                    tw.WriteAttributeString("AllowChangeVisible", allowChangeVisible.ToString());
                    tw.WriteEndElement();
                }
                tw.WriteEndElement();
                tw.WriteEndDocument();
            }
        }


        /// <summary>
        /// 加载配置
        /// </summary>
        private void LoadConfig()
        {
            if (!this.AutoSaveLastConfig
                || !File.Exists(FilenameCfg))
            {
                return;
            }
            using (var tr = XmlTextReader.Create(FilenameCfg))
            {
                tr.ReadStartElement();
                while (tr.Read())
                {
                    if (tr.NodeType == XmlNodeType.Element
                        && tr.Name.Equals("CfgColumn")
                        && tr.HasAttributes)
                    {
                        var name = tr.GetAttribute("Name");
                        var vis = Convert.ToBoolean(tr.GetAttribute("Visible"));
                        var index = Convert.ToInt32(tr.GetAttribute("Index"));
                        var allowChange = Convert.ToBoolean(tr.GetAttribute("AllowChangeVisible"));
                        if (this.Columns.Contains(name))
                        {
                            Columns[name].DisplayIndex = index;
                            Columns[name].Visible = vis;
                            if (Columns[name] is IDataGridViewColumnEx)
                            {
                                (Columns[name] as IDataGridViewColumnEx).AllowChangeVisible = allowChange;
                            }
                        }
                    }
                }
            }
        }
        #endregion
    }
--------------------编程问答--------------------
引用 7 楼 ttcchh2008 的回复:
第一次帮人,自己实现的一个datagridview扩展,别名楼上已经解决了,
Combox网上资料多,比如http://download.csdn.net/detail/slyzly/2756792,
自己的一段代码,发给你,几个变量自己搞定就可以了。dgvScanItems为datagridiew, 里面有一个占位用的colPolarity列,Polarity为枚举……

你这个是什么意思啊? 我不懂啊? --------------------编程问答-------------------- 谁能给个例子啊,小弟的邮箱 250643891@qq.com --------------------编程问答-------------------- 给自己定一下吧。。 --------------------编程问答-------------------- dgvScanItems为DataGridview的实例, dgvScanItems有一个占位用的名称为colPolarity(DataGridViewColumn类型)的列,Polarity为枚举类型,这是未定义变量描述。
采用绑定方案,为Datagridview设定一个DataTable绑定就好了,这个有什么看不懂。

            #region 初始化扫描极性列

            var indexOfPolarity = colPolarity.DisplayIndex;
            this.dgvScanItems.Columns.Remove(colPolarity);
            DataTable dtPolarity = new DataTable();
            dtPolarity.Columns.Add("Polarity", typeof(int));
            dtPolarity.Columns.Add("PolarityName", typeof(string));
            foreach (int index in Enum.GetValues(typeof(Polarity)))
            {
                dtPolarity.Rows.Add(index, Enum.GetName(typeof(Polarity), index));
            }
            colPolarity2 = new DataGridViewComboBoxColumn
                               {
                                   Name = colPolarity.Name,
                                   DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton,
                                   DisplayIndex = indexOfPolarity,
                                   HeaderText = colPolarity.HeaderText,
                                   FillWeight = colPolarity.FillWeight,
                                   DataPropertyName = "Polarity",
                                   DataSource = dtPolarity, //绑定数据源
                                   DisplayMember = "PolarityName",
                                   ValueMember = "Polarity"
                               };

            this.dgvScanItems.Columns.Add(colPolarity2);

            #endregion
--------------------编程问答-------------------- 下拉列表以后可能用到顶个 --------------------编程问答-------------------- http://blog.csdn.net/denqh/article/details/7016534
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,