يوجد خاصيه في القريد فيو التي تعمل بها تسمى DataKeyNames هذه الخاصيه تضع بها اسم العمود الذي يحوي المفتاح الاساسي بالجدول ، يعني سيظهر الكود في الوسوم التي بالصفحه بهذا الشكل :
<asp:GridView ID="DGVName" runat="server" DataKeyNames="
RecordType_ID"
حيث اسم العمود الذي يحوي المفتاح الاساسي
RecordType_ID جميل الى حد الان ،، نصل الى نقطة نريد الكود الذي سيقوم من خلاله باخذ الرقم عند الضغط على احد الازرار و التعامل معه و من خلال كود الاخ ادريس نضع هذه الاسطر مع مراعاة
DGVName اسم القريد فيو الخاصه :
كود :
Dim index As Integer = e.CommandArgument
Dim ID As String = DGVName.DataKeys(index Mod DGVName.PageSize)(0).ToString()
كود :
int index = e.CommandArgument;
string ID = DGVName.DataKeys(index % DGVName.PageSize)(0).ToString();
الان استخرجنا رقم المفتاح او البرايمري كي الخاص بالحقل و تستطيع تطبيق اي اجراء عليه ،،
الجزء الاخر المتعلق بتغيير قيمة احد الخلايا ، يوجد طريقتين لها ام انشاء ميثود يتم استدعائها و معالجة القيمة بناءً عليها
مثال على ذلك : نقوم بتصميم عمود في القريد فيو بهذا الشكل :
<asp:TemplateField HeaderText="حالة الموافقة">
<ItemTemplate>
<asp:Label ID="GVLblShowFieldActive" runat="server" Text='<%#
getProcessingValue(Eval("
dataTable_BooleanClmnName")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
حيث اللون الاحمر تضع به اسم العمود الذي سيحوي قيمة Boolean و اللون الاخضر هي اسم الـ Method التي سنستخدمها لمعالجة القيمة الممرره كالتالي :
كود :
''' <summary> معالجة حقل منطقي في قاعدة البيانات () </summary>
''' <param name="Value">قيمة العمود من قاعدة البيانات</param>
Public Function getProcessingValue(ByVal Value As Object) As Object
Dim result As String = ""
If TypeOf (Value) Is Boolean Then
Select Case Value
Case True
result = "مقبوله"
Case False
result = "مرفوضه"
End Select
Else
Return Value
End If
Return result
End Function
كود :
/// <summary> معالجة حقل منطقي في قاعدة البيانات () </summary>
/// <param name="Value">قيمة العمود من قاعدة البيانات</param>
public object getProcessingValue(object Value)
{
string result = "";
if ((Value) is bool) {
switch (Value) {
case true:
result = "مقبوله";
break;
case false:
result = "مرفوضه";
break;
}
} else {
return Value;
}
return result;
}
هذا بالنسبه للطريقة الاولى ، الطريقة الثانيه و هي في الحدث RowDataBound و هي عند بناء صف او سطر افقي بالقريد فيو فانه يمر بهذا الحدث كل مره و يفحص قيمة حقل Boolean و يغير محتوى خليه بناءً عليه ، لنأخذ مثال صغير :
كود :
Protected Sub DGVName_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles DGVName.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow OrElse e.Row.RowType = DataControlRowType.Separator Then
Dim rowView As DataRowView = DirectCast(e.Row.DataItem, DataRowView)
If rowView("BooleanclmnName").ToString.Trim = "0" Then
e.Row.Cells(4).Text = "تم الرفض"
ElseIf rowView("BooleanclmnName").ToString.Trim = "1" Then
e.Row.Cells(4).BackColor = Drawing.Color.FromName("#92D050")
e.Row.Cells(4).Text = "تم القبول"
e.Row.Cells(4).ForeColor = Drawing.Color.FromName("#ffffff")
e.Row.Cells(4).Font.Bold = True
End If
End If
End Sub
كود :
protected void DGVName_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Separator) {
DataRowView rowView = (DataRowView)e.Row.DataItem;
if (rowView("BooleanclmnName").ToString.Trim == "0") {
e.Row.Cells(4).Text = "تم الرفض";
} else if (rowView("BooleanclmnName").ToString.Trim == "1") {
e.Row.Cells(4).BackColor = Drawing.Color.FromName("#92D050");
e.Row.Cells(4).Text = "تم القبول";
e.Row.Cells(4).ForeColor = Drawing.Color.FromName("#ffffff");
e.Row.Cells(4).Font.Bold = true;
}
}
}
رقم 4 في الكود السابق اي رقم العمود الذي سيتم تغيير محتواه