C# datagridview 问题
C# 的datagridview 问题,困扰了我好久,不知道怎么弄现在把问题贴出来,求高手指导!小弟先谢谢了!
问题就是图片里面说的那样,不知道能实现不?行号的话,如果难以实现的话,就算了,
但是 当窗体 载入了以后,datagridview 里面要自动载入数据库的列名,输入完全后
点击“确定”按钮后,插到相应的数据库, 这个功能一定要实现啊,求帮忙啊!!!!
100分送上! --------------------编程问答-------------------- 自己先顶一下,在线等! --------------------编程问答-------------------- 修改你的列名,从数据库取数据到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
}
你这个是什么意思啊? 我不懂啊? --------------------编程问答-------------------- 谁能给个例子啊,小弟的邮箱 250643891@qq.com --------------------编程问答-------------------- 给自己定一下吧。。 --------------------编程问答-------------------- dgvScanItems为DataGridview的实例, dgvScanItems有一个占位用的名称为colPolarity(DataGridViewColumn类型)的列,Polarity为枚举类型,这是未定义变量描述。
采用绑定方案,为Datagridview设定一个DataTable绑定就好了,这个有什么看不懂。
#region 初始化扫描极性列--------------------编程问答-------------------- 下拉列表以后可能用到顶个 --------------------编程问答-------------------- http://blog.csdn.net/denqh/article/details/7016534
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
补充:.NET技术 , C#