تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يمكن برمجة زر داخل gridview
#1
قمت بعمل gridview مربوط بجدول يحوي طلبات الموظفين .. وقمت بإضافة زي في نهايته ..
أريد برمجة وظيفة الزر أن يقوم بتعديل قيمة في احد أعمدة الجدول يحولها من true  إلى false  مثلا .. دون أن يهتم ببقية اعمدة الجدول ..
كل الشروحات الموجودة تتعلق ببرمجة زر حذف السجل أو تعديله بالكامل وهكذا لكن ألا يمكن برمجة زر مختلف ؟؟
الرد }}}}
تم الشكر بواسطة:
#2
اخواني هل سؤالي صعب ؟؟
مثلا لو اردت اضافة زر إلى gridview أريد أن يقوم هذا الزر بفتح صفحة جديدة وإن يرسل لها قيمة العمود الأول في الصف الذي يحوي الزر !!
-
مثلا زر ((تفاصيل)) عند النقر عليه يفتح صفحة لتفاصيل العملية رقم 5 لو كان الزر في الصف الذي فيه مفتاح اساسي 5 ..
الرد }}}}
تم الشكر بواسطة:
#3
لعمل هذه الطريقة اتبع الخطوات التالية :
اولاً قم بإنشاء حقل جديد من نوع ButtonFeild.
ثانياً توجه الى EditColumns وحدد الحقل الذي انشأته سابقاً وانظر الى خصائصه وابحث عن الخاصية
CommandName ضع مقابلها اي اسم وليكن مثلاً SetTrue.
ثالثاً حدد الــ gridview وتوجه الى الاحداث Events وابحث عن الحدث GridView1_RowCommand وبداخله
ضع الكود التالي :
PHP كود :
   protected void GridView1_RowCommand(object senderGridViewCommandEventArgs e)
 
   {
 
       try
        
{

 
           if (e.CommandName == "SetTrue")
 
           {
 
               Response.Write("True Done");
 
           }
 
           else if (e.CommandName == "SetFalse")
 
           {
 
               Response.Write("False Done");
 
           }
 
       }
 
       catch (Exception ex)
 
       {
 
           Response.Write(ex.Message);
 
       }
 
   
لاتنسى تفعيل الخاصية Select التي تظهر امام كل صف

اتمنى اخي الغالي ان اكون قد ساهمت ولو بجزء قليل في حل مشكلتك.
الرد }}}}
تم الشكر بواسطة:
#4
عندما تجعل قيمة False True
في حال كونها نص فقط دون اي قيد او شرط فالامر بلا فائدة
وإذا لم تخزن ايضا فلابد من ان تكون نتيجة عملية ما او شرط ما
انت تريد فقط اضافة عمود وتغيير القيم في خلايا ما بين True, False
دون شيء؟ لابد من وجود عملية مثلا موظف غائب موظف حاضر
سبحان الله والحمدلله ولا إله إلا الله والله أكبر
 رَبِّ اغْفِرْ لِي وَلِوَالِدَيَّ
Heart
الرد }}}}
تم الشكر بواسطة:
#5
آسف على التأخير إخواني ..
اخي الحبيب إدريس ..
الطريقة التي كتبتها افادتني كثيرا وحقيقة لم اكن اعرفها ..
لكن ما اريده هو أن يتم اخذ قيمة من الصف الذي يحوي الزر ..
سأشرح ما اريده بالتفصيل لك وللأخ الحبيب أبو عمر ..
-
لدي جدول ((جريد فيو)) يحتوي على طلبات الإجازة للموظفين الجدول يحوي عمودة مثلا بإسم ((ManagerApp)) يمكن ان يحتوي قيمة 0 او 1 مثلا عندما يوافق المدير على الطلب بالضغط على الزر تتحول القيمة من 0 إلى 1  .. ويوجد زر في كل صف بالضغط عليه تكون الموافقة على الإجازة ..
-
كل ما اريده حاليا أن استطيع التعامل مع رقم الطلب عند الضغط على الزر .. رقم الطلب هو العنصر الأول في الجريد فيو .. لو ضغطت على الزر في الصف الأول مثلا يتم الموافقة على الطلب رقم ذ وهكذا ..
الرد }}}}
تم الشكر بواسطة:
#6
ما تحتاجه ليس صعبا ولكني لا أحسن  ايصال المعلومة في البرمجة ربما لانها هواية وليست وظيفة
حاول ترفع مثال صغير ودع لنا فقط كتابة الكود تحت الازرار
ما رأيك؟
فحدث اClick للبوتون داخل الجريد فيو يختلف قليلا عن كونه حراً على الصفحة
سيصبح داخل التمبليت في الجريد فيو بهذا الشكل
   Protected Sub Button8_Click(sender As Object, e As System.EventArgs)
البعض يذهب للخصائص ويجعل  ال CommandName= Select مثلا
والبعض لا يهتم بمسمى الامر مطلقاً
فيتجه لحدث الزر نفسه ويتوصل اليه بمعرفة رقم السجل في الجريد
هكذا
CType(sender, Control).Parent.Parent
وبمجرد معرفة الاندكس  لا يصعب شي بعدها بإذن الله
سبحان الله والحمدلله ولا إله إلا الله والله أكبر
 رَبِّ اغْفِرْ لِي وَلِوَالِدَيَّ
Heart
الرد }}}}
تم الشكر بواسطة:
#7
يوجد خاصيه في القريد فيو التي تعمل بها  تسمى  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  في الكود السابق  اي  رقم العمود الذي سيتم  تغيير  محتواه
اسم معرفي : محمد يحيى
الرد }}}}
تم الشكر بواسطة:
#8
راااااائع اخوي myalsailamy ..
جاري العمل بهذه الطريقة
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف يمكن نشر تطبيق asp على شبكة محلية ؟؟ starosta 5 136 20-09-16, 12:54 PM
آخر رد: starosta
  مشكلة في GridView starosta 3 104 21-08-16, 11:27 AM
آخر رد: أبو عمر

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم