datagrid 如何用datagird控件设置某行不可编辑?请给出代码实现. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给不需要编辑的行加个标记,加上CommandName="NoEdit"在ItemEdit方法中if(e.CommandName=="NoEdit"){ //不编辑}else{ 进行编辑} 给不需要编辑的行加个标记,加上CommandName="NoEdit"在ItemEdit方法中if(e.CommandName=="NoEdit"){ //不编辑}else{ 进行编辑} 楼主请参考://.aspx<asp:DataGrid ID="dg" runat="server" AutoGenerateColumns="true" OnEditCommand="Edit"> <Columns> <asp:TemplateColumn> <ItemTemplate> <asp:Label ID="lblEdit" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "CanEditable") %>' /> </ItemTemplate> </asp:TemplateColumn> <asp:EditCommandColumn CancelText="取消" UpdateText="更新" EditText="编辑" /> </Columns></asp:DataGrid>.cs:protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) BindData();}//绑定数据到DataGirdprivate void BindData(){ dg.DataSource = CreateData(); dg.DataBind();}//创建随机数据(楼主可以从数据库里读取private DataTable CreateData(){ DataTable dt = new DataTable(); DataColumn dc = new DataColumn("Value"); DataColumn dc1 = new DataColumn("CanEditable"); dt.Columns.Add(dc); dt.Columns.Add(dc1); for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr[0] = i; dr[1] = i % 2 == 0 ? "可编辑" : "不可编辑"; dt.Rows.Add(dr); } return dt;}//编辑protected void Edit(object sender, DataGridCommandEventArgs e){ //根据Label控件中的值来判断是否可以编辑 //也可以自己设置一个值来判断是否可编辑 Label lbl = e.Item.FindControl("lblEdit") as Label; if (lbl != null) { if (lbl.Text == "可编辑") { dg.EditItemIndex = e.Item.ItemIndex; BindData(); } }} //很早以前的了,变颜色也有,//用法:复制过来的哈DataGridTextBoxColumnIETSPC aColumnTextColumn = new DataGridTextBoxColumnIETSPC();aColumnTextColumn.InitCell +=new MyCellEventHandler(aColumnTextColumn_InitCell);private void aColumnTextColumn_InitCell(object sender, MyDataGridEventArgs e){e.Enable = false;}using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Windows.Forms;namespace System.Windows.Forms{ public class MyDataGridEventArgs : EventArgs { private int _column; private int _row; private bool _enable; private TextBox _textbox; private Font _font; private Brush _backBrush; private Brush _foreBrush; private bool _useBaseClassDrawing; private string _value; public MyDataGridEventArgs(int row, int col, bool val, TextBox tb, Font font1, Brush backBrush, Brush foreBrush,string text) { _row = row; _column = col; _enable = val; _textbox = tb; _backBrush = backBrush; _foreBrush = foreBrush; _useBaseClassDrawing = false; _value = text; } public string Value { get{return _value;} } /// <summary> /// 获取DataGrid的列 /// </summary> public int Column { get{ return _column;} //set{ _column = value;} } /// <summary> /// 获取DataGrid的行 /// </summary> public int Row { get{ return _row;} //set{ _row = value;} } /// <summary> /// 设置或获取一个值,是否响应和用户互交 /// </summary> public bool Enable { get{ return _enable;} set{ _enable = value;} } /// <summary> /// 设置或获取Cell的TextBox控件,测试而已 /// </summary> private TextBox TextBox { get{ return _textbox;} set{ _textbox = value;} } /// <summary> /// 获取或设置Cell的字体 /// </summary> public Font TextFont { get{ return _font;} set{ _font = value;} } /// <summary> /// 获取或设置一个Brush对象,用于Cell背景Brush /// </summary> public Brush BackBrush { get{ return _backBrush;} set{ _backBrush = value;} } /// <summary> /// 获取或设置一个Brush对象,用于Cell前景Brush /// </summary> public Brush ForeBrush { get{ return _foreBrush;} set{ _foreBrush = value;} } /// <summary> /// 获取或设置,是否启用系统默认设置,默认为false /// </summary> public bool UseBaseClassDrawing { get{ return _useBaseClassDrawing;} set{ _useBaseClassDrawing = value;} } } public delegate void MyCellEventHandler(object sender, MyDataGridEventArgs e); /// <summary> /// dsfsdf /// </summary> public class DataGridTextBoxColumnIETSPC : DataGridTextBoxColumn { /// <summary> /// 当DataGrid在绘制时发生 /// </summary> public event MyCellEventHandler InitCell; private int _col; private Color _currentTextBoxBackColor; /// <summary> /// 获取或设置当前活动Cell的背景颜色 /// </summary> public Color CurrentTextBoxBackColor { get{return _currentTextBoxBackColor;} set{_currentTextBoxBackColor = value;} } public DataGridTextBoxColumnIETSPC() { _col = -1; _currentTextBoxBackColor = Color.White; TextBox.KeyPress +=new KeyPressEventHandler(TextBox_KeyPress); } public DataGridTextBoxColumnIETSPC(int column):base() { _col = column; } protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight) { bool enabled = true; DataGrid grid = this.DataGridTableStyle.DataGrid; if (_col == -1) { int i = this.DataGridTableStyle.GridColumnStyles.IndexOf(this); if (i > -1) _col = i; } if(grid.CurrentRowIndex == rowNum && grid.CurrentCell.ColumnNumber == _col) { TextBox.BackColor = _currentTextBoxBackColor; } if(InitCell != null) { string str = (string) GetColumnValueAtRow(source,rowNum); MyDataGridEventArgs e = new MyDataGridEventArgs(rowNum, _col, enabled, TextBox, this.DataGridTableStyle.DataGrid.Font, backBrush, foreBrush,str); InitCell(this, e); backBrush = e.BackBrush; foreBrush = e.ForeBrush; if(!e.Enable) backBrush = Brushes.LightGray; } base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight); } protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible) { bool enabled = true; if(InitCell != null) { MyDataGridEventArgs e = new MyDataGridEventArgs(rowNum, _col, enabled,TextBox, this.DataGridTableStyle.DataGrid.Font, null, null,null); InitCell(this, e); enabled = e.Enable; } if(enabled) { base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible); } else { SendKeys.Send("{Enter}"); } TextBox.ReadOnly = !enabled; } protected override void Dispose(bool disposing) { if(disposing) { TextBox.KeyPress -= new KeyPressEventHandler(TextBox_KeyPress); } base.Dispose (disposing); } private void TextBox_KeyPress(object sender, KeyPressEventArgs e) { if(!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '-') { e.Handled = true; } } }} httpwebrequest 跨域 模拟登录 如何解决 请问如何把winform打包成exe执行文件,不是安装的exe pop3和smtp相关书籍 如何取datagridview行的状态(add,modiff,delete) 如何在一个窗体上画circle?或者类似的line什么的~[C#] 如何在程序中创建excel文件到指定文件夹 帮朋友问,一个很小的程序 c#是不是只能用vs.net进行编写,编译呢?有没有别的编译环境呢?你们一般在什么系统编写c#? 学c#有前途吗?和c++怎么样? 没有编程基础,学C#会不会很困难? 问给关于SQL写法的问题 有关进度,队列的问题
在ItemEdit方法中
if(e.CommandName=="NoEdit")
{
//不编辑
}
else
{
进行编辑
}
在ItemEdit方法中
if(e.CommandName=="NoEdit")
{
//不编辑
}
else
{
进行编辑
}
<asp:DataGrid ID="dg" runat="server" AutoGenerateColumns="true" OnEditCommand="Edit">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label ID="lblEdit" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "CanEditable") %>' />
</ItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn CancelText="取消" UpdateText="更新" EditText="编辑" />
</Columns>
</asp:DataGrid>.cs:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindData();
}//绑定数据到DataGird
private void BindData()
{
dg.DataSource = CreateData();
dg.DataBind();
}//创建随机数据(楼主可以从数据库里读取
private DataTable CreateData()
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("Value");
DataColumn dc1 = new DataColumn("CanEditable");
dt.Columns.Add(dc);
dt.Columns.Add(dc1); for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i;
dr[1] = i % 2 == 0 ? "可编辑" : "不可编辑"; dt.Rows.Add(dr);
} return dt;
}//编辑
protected void Edit(object sender, DataGridCommandEventArgs e)
{
//根据Label控件中的值来判断是否可以编辑
//也可以自己设置一个值来判断是否可编辑
Label lbl = e.Item.FindControl("lblEdit") as Label;
if (lbl != null)
{
if (lbl.Text == "可编辑")
{
dg.EditItemIndex = e.Item.ItemIndex; BindData();
}
}
}
DataGridTextBoxColumnIETSPC aColumnTextColumn = new DataGridTextBoxColumnIETSPC();
aColumnTextColumn.InitCell +=new MyCellEventHandler(aColumnTextColumn_InitCell);private void aColumnTextColumn_InitCell(object sender, MyDataGridEventArgs e)
{
e.Enable = false;
}
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;namespace System.Windows.Forms
{
public class MyDataGridEventArgs : EventArgs
{
private int _column;
private int _row;
private bool _enable;
private TextBox _textbox;
private Font _font;
private Brush _backBrush;
private Brush _foreBrush;
private bool _useBaseClassDrawing;
private string _value;
public MyDataGridEventArgs(int row, int col, bool val, TextBox tb, Font font1, Brush backBrush, Brush foreBrush,string text)
{
_row = row;
_column = col;
_enable = val;
_textbox = tb;
_backBrush = backBrush;
_foreBrush = foreBrush;
_useBaseClassDrawing = false;
_value = text;
}
public string Value
{
get{return _value;}
}
/// <summary>
/// 获取DataGrid的列
/// </summary>
public int Column
{
get{ return _column;}
//set{ _column = value;}
}
/// <summary>
/// 获取DataGrid的行
/// </summary>
public int Row
{
get{ return _row;}
//set{ _row = value;}
}
/// <summary>
/// 设置或获取一个值,是否响应和用户互交
/// </summary>
public bool Enable
{
get{ return _enable;}
set{ _enable = value;}
}
/// <summary>
/// 设置或获取Cell的TextBox控件,测试而已
/// </summary>
private TextBox TextBox
{
get{ return _textbox;}
set{ _textbox = value;}
}
/// <summary>
/// 获取或设置Cell的字体
/// </summary>
public Font TextFont
{
get{ return _font;}
set{ _font = value;}
}
/// <summary>
/// 获取或设置一个Brush对象,用于Cell背景Brush
/// </summary>
public Brush BackBrush
{
get{ return _backBrush;}
set{ _backBrush = value;}
}
/// <summary>
/// 获取或设置一个Brush对象,用于Cell前景Brush
/// </summary>
public Brush ForeBrush
{
get{ return _foreBrush;}
set{ _foreBrush = value;}
}
/// <summary>
/// 获取或设置,是否启用系统默认设置,默认为false
/// </summary>
public bool UseBaseClassDrawing
{
get{ return _useBaseClassDrawing;}
set{ _useBaseClassDrawing = value;}
}
} public delegate void MyCellEventHandler(object sender, MyDataGridEventArgs e); /// <summary>
/// dsfsdf
/// </summary>
public class DataGridTextBoxColumnIETSPC : DataGridTextBoxColumn
{
/// <summary>
/// 当DataGrid在绘制时发生
/// </summary>
public event MyCellEventHandler InitCell;
private int _col;
private Color _currentTextBoxBackColor; /// <summary>
/// 获取或设置当前活动Cell的背景颜色
/// </summary>
public Color CurrentTextBoxBackColor
{
get{return _currentTextBoxBackColor;}
set{_currentTextBoxBackColor = value;}
}
public DataGridTextBoxColumnIETSPC()
{
_col = -1;
_currentTextBoxBackColor = Color.White;
TextBox.KeyPress +=new KeyPressEventHandler(TextBox_KeyPress);
}
public DataGridTextBoxColumnIETSPC(int column):base()
{
_col = column;
} protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
{
bool enabled = true;
DataGrid grid = this.DataGridTableStyle.DataGrid;
if (_col == -1)
{
int i = this.DataGridTableStyle.GridColumnStyles.IndexOf(this);
if (i > -1)
_col = i;
}
if(grid.CurrentRowIndex == rowNum && grid.CurrentCell.ColumnNumber == _col)
{
TextBox.BackColor = _currentTextBoxBackColor;
}
if(InitCell != null)
{
string str = (string) GetColumnValueAtRow(source,rowNum);
MyDataGridEventArgs e = new MyDataGridEventArgs(rowNum, _col, enabled, TextBox, this.DataGridTableStyle.DataGrid.Font, backBrush, foreBrush,str);
InitCell(this, e);
backBrush = e.BackBrush;
foreBrush = e.ForeBrush;
if(!e.Enable)
backBrush = Brushes.LightGray;
}
base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
bool enabled = true;
if(InitCell != null)
{
MyDataGridEventArgs e = new MyDataGridEventArgs(rowNum, _col, enabled,TextBox, this.DataGridTableStyle.DataGrid.Font, null, null,null);
InitCell(this, e);
enabled = e.Enable;
}
if(enabled)
{
base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
}
else
{
SendKeys.Send("{Enter}");
}
TextBox.ReadOnly = !enabled;
}
protected override void Dispose(bool disposing)
{
if(disposing)
{
TextBox.KeyPress -= new KeyPressEventHandler(TextBox_KeyPress);
}
base.Dispose (disposing);
}
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if(!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '-')
{
e.Handled = true;
}
}
}
}