اعتبار سنجی Filed-Level وابسته است به خاصیت مقدارهایی از یک آبجکت bussines در هنگام insert یا update . به صورت ساده تر یعنی یک اعتبار سنجی که شما داده های ورودی را از نظر نوع و اندازه و طولشان باید چک کنید و این چک کردن فقط روی یک ستون انجام میشود . بعضی از اعتبار سنجی Filed-Level عبارتند از(در جدول products):

QuantityPerUnit

• productName که طولش باید 40 کاراکتر باشد
• QuantityPerUnit که طولش باید حداکثر 20 کاراکتر باشد
• productName,ProductID,DisContinued فیلدهای هستند که حتما باید پر شوند
• UnitPrice, UnitsInStock UnitsOnOrder و ReorderLevel باید مقداری بیشتر یا مساوی صفر داشته باشند

این قوانین باید در سطح دیتابیس هم تعریف شده باشد مثلا اینکه طول طول فیلد productName که باید بیشتر از 40 نباشد در سطح دیتا بیس به این صورت تعریف شده Navarchar(40) واینکه فبلد productName نمیتواند null باشد alow null را برداشتیم.

در اضافه هر قانونی که در سطح دیتا بیس وجود دارد در هر جدول Dataset typed برای هر ستون اعمال میشود به طور جزئی تر اگر ستون productName از جدول ما نباید طولش از 40 کاراکتر بیشتر باشد در typed dataset هم همینگونه است .

برای دیدن ا اعتبار سنجی Filed-Level وجود به DataSet Designer رفته و بکی از فیلدها(ستون QuantityPerUnit) را انتخاب کنید و راست کلیک کرده و گزینه property آن را انتخاب کنید . همانطور که میبینید در قسمت MaxLenght عدد 20 و در قسمت AllowDBnull عبارت true نوشته شده است.



متاسفانه ما نمی توانیم در این قسمت اعتبار سنجی Filed-Level خاصی اضافه کنیم نمونه ای از این اعتبارسنجی را مثلا منفی نبودن بعضی از ستونها میتوان نام برد.برای این کار ما باید از یکی از event های DataTable به نام ColumnChanging استفاده کنیم .
خوب برای استفاده از این تکنیک ما یک event handler برای کلاس ProductsDataTable
میسازیم.

خوب برای شروع در فولدر App_Code کلاسی به نام productsDataTable.ColumnChanging.cs
به سازید.




در مرحله بعدی یک event handler برای ستونهایی جدول مورد نظر که میخواهیم اعتبار سنجی روی آن انجام شود می سازیم

توجه کنید که شما باید حتما حالتی را که نباید رخ دهد را تشخیص داده و تولید exeption کنید که این کار به شما کمک میکند که خطای کاربر را در لایه presentation تشخیص داده و به کاربر گوشزد کنید

توجه کنید که exeption این قسمت از نوع ArgumentException است

کد:

ProductsDataTable.ColumnChanging.cs

public partial class Northwind
{
public partial class ProductsDataTable
{
public override void BeginInit()
{
this.ColumnChanging += ValidateColumn
}
void ValidateColumn(object sender,
DataColumnChangeEventArgs e)
{
if (e.Column.Equals(this.UnitPriceColumn))
{
if (!Convert.IsDBNull(e.ProposedValue) &&
(decimal)e.ProposedValue < 0)
{
throw new ArgumentException(
"UnitPrice cannot be less than zero",
"UnitPrice");
}
}
else if (e.Column.Equals(this.UnitsInStockColumn) ||
e.Column.Equals(this.UnitsOnOrderColumn) ||
e.Column.Equals(this.ReorderLevelColumn))
{
if (!Convert.IsDBNull(e.ProposedValue) &&
(short)e.ProposedValue < 0)
{
throw new ArgumentException(string.Format(
"{0} cannot be less than zero",
e.Column.ColumnName), e.Column.ColumnName);
}
}
}
}
}

شما به وسیله کد زیر یک exeption تولید میکنید

کد:

throw new ArgumentException("UnitPrice cannot be less than zero","UnitPrice");

و در لایه presentation شما به وسیله try و catch این execption را کنترل کنید.
__________________