C# 同时在不同行中设置ColumnError
我有时使用C# 同时在不同行中设置ColumnError,c#,devexpress,multiple-columns,C#,Devexpress,Multiple Columns,我有时使用SetColumnError方法,根据我的经验,我知道当行失去焦点时图标会消失 我现在想要的是在不同行的不同单元格中同时显示相同的错误图标。大概是这样的: for (int i = 0; i < view.RowCount; i++) { /* Move the focus for setting the error */ view.FocusedRowHandle = i; if (condition) { view.Set
SetColumnError
方法,根据我的经验,我知道当行失去焦点时图标会消失
我现在想要的是在不同行的不同单元格中同时显示相同的错误图标。大概是这样的:
for (int i = 0; i < view.RowCount; i++)
{
/* Move the focus for setting the error */
view.FocusedRowHandle = i;
if (condition)
{
view.SetColumnError(view.Columns["NameOfColumn"],
"Message", ErrorType.Critical);
}
}
public partial class UsDesiredName : UserControl3
{
//Some code for your class
private void ValidateData()
{
var data = gc_view.DataSource as List<MyModel>;
foreach (var item in data)
{
item.ClearErrors();
if (condition for columnA)
{
item.NoteError = "Required fields.";
item.SetColumnError("NameOfColumnA", "Required field.");
}
if (condition for columnB)
{
item.NoteError = "Required fields.";
item.SetColumnError("NameOfColumnB", "Required field.");
}
}
}
private void gc_view_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
ValidateData()
}
}
for(int i=0;i
我尝试了类似的方法,但没有成功,我唯一的成就是,带有焦点的最后一行在指定的单元格中显示了错误图标。我想用SetColumnError
来实现这一点,但如果有其他方法来实现这一点
非常感谢您的帮助。很抱歉,
GridView.SetColumnError()
只能用于重点行
为了满足您的需求,您必须使用
GridColumn.ImageIndex
和ColumnView.Images
属性手动实现它,以便在列标题中显示图标。问题在于网格本身无法存储错误,这就是为什么只维护FocusedRow
的图标错误,但您可以实现某些接口
并存储每行的所有错误
接口的名称是,此p提供了提供自定义错误信息的功能,用户界面可以绑定到该信息
下面是使用此接口的示例:
public class MyModel : IDataErrorInfo
{
/// <summary>
/// Stores error descriptions for the properties.
/// </summary>
Hashtable propertyErrors;
/// <summary>
/// Stores an error description for the item.
/// </summary>
String fNoteError;
/// <summary>
/// Gets and sets an error for the current item
/// </summary>
internal string NoteError
{
get { return fNoteError; }
set
{
if (fNoteError != null && fNoteError == value) return;
fNoteError = value;
}
}
//Returns an error description set for the item's property
string IDataErrorInfo.this[string columnName]
{
get
{
return GetColumnError(columnName);
}
}
//Returns an error description set for the current item
string IDataErrorInfo.Error
{
get { return NoteError; }
}
public String NameOfColumnA { get; set; }
public String NameOfColumnB { get; set; }
public MyModel()
{
propertyErrors = new Hashtable { { "NameOfColumnA", "" }, { "NameOfColumnB", "" }};
fNoteError = "";
}
//Sets an error for an item's property
public void SetColumnError(string elem, string error)
{
if (propertyErrors.ContainsKey(elem))
{
if ((string)propertyErrors[elem] == error) return;
propertyErrors[elem] = error;
}
}
//Gets an error for an item's property
public string GetColumnError(string elem)
{
if (propertyErrors.ContainsKey(elem))
return (string)propertyErrors[elem];
else
return "";
}
public void ClearErrors()
{
SetColumnError("NameOfColumnA", "");
SetColumnError("NameOfColumnB", "");
NoteError = "";
}
}
我希望这对某些人和我一样有用。看看这个DevExpress示例是否适合您的需要:为了让这对我有用,我必须在循环中将每一行设置为聚焦,否则直到这些行聚焦后才会显示错误。谢谢