כפתור בתוך הגריד

כפתור בתוך הגריד

בתוך GridView אני רוצה לשים כפתור, שיעשה איזו פעולה. איך עושים את זה? בפעולה הזו אני צריך לדעת כמה נתונים על השורה שבה היה הכפתור שנלחץ. (הפעולה היא לא הוספה/עריכה/מחיקה, כך שלא מדובר על כפתור command ) אני רוצה לקשר את הכפתור הזה לפונקציה שתתבצע בשרת. וגם זה: מה ההבדל בין asp:ButtonField לבין asp:button ? ואיזה מהם הוא הנכון להשתמש בו במקרה שלי?
 
עובד מצוין, תודה!

וגם שיפור קטן: הייתי צריך להעלים את עמודת הקוד. עשיתי visible=false והכל הפסיק לעבוד. כלומר, העמודה באמת איננה ואז אי אפשר להשיג את הקוד החבוי בה. גיגלתי קצת ומצאתי את התשובה: את ההעלמה צריך לעשות ב CSS, עם display:none ואז זה עובד יפה. לא רואים את עמודת ההמספר, ובתוך קוד הכפתור הוא עדיין נמצא.
 

pintyo

New member
הצעת יעול - מבחינת תחזוקה של הקוד

לא ממליץ להשתמש באינדקס על התאים - כל הוספה/הסרה של עמודות יכולה ליצור צרות צרורות. עדיף להחליף את ה BoundField ב TemplateField שבתוכו Label עם ID שאותו אפשר לחפש ע"י findControl ואז:
at the designer: <asp:TemplateField HeaderText="FirstName" SortExpression="FirstName"> <ItemTemplate> <asp:Label ID="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> in your code 1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 Button Button1 = (Button)sender; 4 GridViewRow grdRow = (GridViewRow)Button1.Parent.Parent; 5 string strField1 = grdRow.Cells[1].Text; 6 Label1.Text = grdRow.Cells[1].Text + " " + grdRow.Cells[2].Text; 7 } replace line 6 with: Label1.Text = (Label)grdRow.FindControl("lblFirstName")).Text; //you can use "as Label" and check the result to be safe​
ובנוסף לגבי asp:ButtonField - אפשר להשתמש גם בו ואז להוציא מ GridViewCommandEventArgs את מספר השורה נלחצה (למרות שאין ממש הבדל בין זה לבין מעבר אל ה parent של ה parent
 
למעלה