请教一个dataGridView的自定义Column的问题。

baoma2000 2005-09-14 09:17:32
dataGridView中提供了几个默认的DataGridViewColumn,比如DataGridViewButtonColumn。我想设置另外的DataGridViewColumn的改怎么做。比如calendar,或者我自己的控件。最好有代码,谢谢了!
...全文
308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyvvvv 2005-11-02
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace SourceCenter
{

public class CalendarCell : DataGridViewTextBoxCell
{
public CalendarCell()
: base()
{
}

public override void InitializeEditingControl(int rowIndex,
object initialFormattedValue,
DataGridViewCellStyle dataGridViewCellStyle)
{
CalendarEditingControl cnnc;
CalendarColumn cnncl;
DataGridViewColumn dgvc;

base.InitializeEditingControl(rowIndex, initialFormattedValue,
dataGridViewCellStyle);

cnnc = DataGridView.EditingControl as CalendarEditingControl;

dgvc = this.OwningColumn;
if (dgvc is CalendarColumn)
{
cnncl = dgvc as CalendarColumn;
cnnc.Value = (this.Value != null) ? DateTime.Parse(this.Value.ToString()) : DateTime.Now;
}
}

public override Type EditType
{
get
{
return typeof(CalendarEditingControl);
}
}

}

public class CalendarColumn : DataGridViewColumn
{
public CalendarColumn()
: base(new CalendarCell())
{
}

public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}

set
{
// Only cell types that derive from CalendarCell are supported as the cell template.
if (value != null && !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
{
string s = "Cell type is not based upon the CalendarCell.";//CustomColumnMain.GetResourceManager().GetString("excNotCalendar");
throw new InvalidCastException(s);
}

base.CellTemplate = value;
}
}
}


public class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
{
protected int rowIndex;
protected DataGridView dataGridView;
protected bool valueChanged = false;

public CalendarEditingControl()
{
this.Format = DateTimePickerFormat.Short;
//this.BorderStyle = BorderStyle.FixedSingle;
//this.Maximum = 800;
}

protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
NotifyDataGridViewOfValueChange();
}

protected virtual void NotifyDataGridViewOfValueChange()
{
this.valueChanged = true;
if (this.dataGridView != null)
{
this.dataGridView.NotifyCurrentCellDirty(true);
}
}


public object EditingControlFormattedValue
{
set
{
this.Value = DateTime.Parse(value.ToString());
NotifyDataGridViewOfValueChange();
}
get
{
return this.Value.ToShortDateString();
}

}

public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
{
return this.Value.ToShortDateString();
}

public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
return !dataGridViewWantsInputKey;
}

public void PrepareEditingControlForEdit(bool selectAll)
{
if (selectAll) this.Select(true,true);
}

public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
//this.Font = dataGridViewCellStyle.Font;
//this.ForeColor = dataGridViewCellStyle.ForeColor;
//this.BackColor = dataGridViewCellStyle.BackColor;
//this.TextAlign = translateAlignment(dataGridViewCellStyle.Alignment);
}

public int EditingControlRowIndex
{
get
{
return this.rowIndex;
}

set
{
this.rowIndex = value;
}
}

public bool EditingControlValueChanged
{
get
{
return valueChanged;
}

set
{
this.valueChanged = value;
}
}

public bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}


public Cursor EditingPanelCursor
{
get
{
return Cursors.IBeam;
}
}

public DataGridView EditingControlDataGridView
{
get
{
return this.dataGridView;
}

set
{
this.dataGridView = value;
}
}
}
}
zeroonezero 2005-10-15
  • 打赏
  • 举报
回复
可以用代码来实现
也可以用编辑模板。
我感觉用代码自己写方便
<Columns>
<asp:BoundField DataField="GRD_ID" HeaderText="序号" InsertVisible="False" ReadOnly="True"
SortExpression="GRD_ID" />
<asp:BoundField DataField="GRD_NAME" HeaderText="年级名" SortExpression="GRD_NAME" />
<asp:TemplateField HeaderText="部名" SortExpression="GRD_DEPID">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("DEP_NAME") %>' Width="121px"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DEP_DropDownList" DataSourceID="SqlDataSource1" DataTextField="DEP_NAME" DataValueField="DEP_ID" SelectedValue='<%# Bind("DEP_ID") %>' runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" CancelText="取消" DeleteText="删除" EditText="编辑" UpdateText="更新" />
</Columns>
cdo 2005-09-14
  • 打赏
  • 举报
回复
最通用的方法是重绘,这样想加一般的控件上去都行了。
98star 2005-09-14
  • 打赏
  • 举报
回复
http://mech.ncu.edu.cn/99star/blogview.asp?logID=67
leonbingo 2005-09-14
  • 打赏
  • 举报
回复
学习,顶
cxx1997 2005-09-14
  • 打赏
  • 举报
回复
www.microsoft.com/china/msdn/archives/ library/dnaspp/html/creatingcustomcolumns.asp
www.pcdog.com/p/html/20041219/191220046713_1.htm

asp.net的例子

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧