יש אפשרות להוסיף javascript?

a l i c e 2 6

New member
יש אפשרות להוסיף javascript?

יש אפשרות להוסיף javascript ב Data Grid? נגיד ואני רוצה לעשות onmouseover בטבלת Data Grid שמקושרת לdatabase ושזה יסמן לי שורה בכל פעם שהסמן עובר, אפשר לעשות כזה דבר? אני משתמשת בVS 2005 ולכן לא עשיתי קוד C# למילוי Data Grid. אפשר לעשות את זה בקוד ASP או בC# ?? תודה רבה לכל עונה
 

a l i c e 2 6

New member
ועוד שאלה...

עשיתי select לטבלה שמקושרת ל- database (עם הקוד המלא בC# ועם SqlDataReader), זה יצר לי טבלה של HTML עם נתונים של הטבלה, איך אני יכולה לקבוע את המיקום של הטבלה? זה יוצא לי הכי למעלה ואני רוצה שזה יופיע באיזה TD מסויים בטבלה, יש קוד ב- C# או בASP לזה? תודה רבה לכל עונה:)
 

drbunsen

New member
ב-1.1

את יכולה להוסיף ב-ItemDataBind של ה-grid קוד JS ל-ONMOUSEOVER דרך ה-ATTRIBUTES. לא יודע אם זה השתנה ב-2.0
 

a l i c e 2 6

New member
תודה אבל... ב- 2005 vs

אי אפשר להוסיף ItemDataBind הקוד שיצרתי הוא כזה <td style="height: 132px; text-align: center; background-color: #fffbee;" colspan="3"> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" Width="473px" DataMember="DefaultView"> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#E3EAEB" /> <EditRowStyle BackColor="#7C6F57" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:BoundField DataField="1" HeaderText="1" SortExpression="1"/> <asp:ImageField DataAlternateTextField="2" HeaderText="2"> </asp:ImageField> <asp:BoundField DataField="3" HeaderText="3" SortExpression="3" /> <asp:BoundField DataField="4" HeaderText="4" SortExpression="4" /> <asp:BoundField DataField="5" HeaderText="5" SortExpression="5" /> <asp:HyperLinkField DataNavigateUrlFields="ID_number" DataNavigateUrlFormatString="?ID={0}" HeaderText="ID_number" Text="ID" /> </Columns> </asp:GridView> </td> ניסיתי להוסיף ItemDataBind כ Attrubit וזה לא נתן לי עם איזה Attrubit אני יכולה להשתמש? תודה רבה...
 

a l i c e 2 6

New member
סורי, אני לא מצליחה לקודד שמאל לימי

ן <td style="height: 132px; text-align: center; background-color: #fffbee;" colspan="3"> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" Width="473px" DataMember="DefaultView"> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#E3EAEB" /> <EditRowStyle BackColor="#7C6F57" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:BoundField DataField="1" HeaderText="1" SortExpression="1"/> <asp:ImageField DataAlternateTextField="2" HeaderText="2"> </asp:ImageField> <asp:BoundField DataField="3" HeaderText="3" SortExpression="3" /> <asp:BoundField DataField="4" HeaderText="4" SortExpression="4" /> <asp:BoundField DataField="5" HeaderText="5" SortExpression="5" /> <asp:HyperLinkField DataNavigateUrlFields="ID_number" DataNavigateUrlFormatString="?ID={0}" HeaderText="ID_number" Text="ID" /> </Columns> </asp:GridView> </td>
 

drbunsen

New member
ביתר פירוט

בקוד, באירוע ItemDataBind של ה-Grid את מוסיפה:
e.item.attributes("onmouseover","alert('HELLO THERE!'")​
למשל....
 

a l i c e 2 6

New member
../images/Emo9.gifDataGrid זה בעצם GridVIew

התבלבלתי יש אירוע onDataBind...אפשר להשתמש בזה? כי אין שם אירוע onItemDataBind תודה רבה ומצטערת על המלא שאלות...
 

Justin Angel

New member
קה פרובלמה מואי צ'יקיטה?

כמו שאמרו קודם לכן, יש אירועים ב-GridView שמאפשרים לתפוס את יצירת השורה החדשה (היות ואין חשיבות למידע ניתן להשתמש באירוע ה-RowCreated ולא בהכרח באירוע RowDataBound שנותן גישה למידע). הכוונה כאן היא שכל פעם שיש שורה חדשה שנוצרת האירוע הזה עולה ודרך e.Row ניתן לקבל את השורה הספציפית המדוברת.
// in myWebForm.aspx <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" onrow OnRowCreated="GridView1_RowCreated"> </asp:GridView> // in myWebForm.aspx.cs protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = new string[] {"hello", "world"}; // or a DataTable or whatever GridView1.DataBind(); } protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { GridViewRow OhHelloThereIAmTheCurrentlyCreatedRow = e.Row; } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { GridViewRow OhHelloThereIAmTheCurrentlyDataBoundedRow = e.Row; }​
כל כזאת שורה של GridViewRow מכילה מערך תאים (דרך e.Row.Cells) ואותו מערך תאים חושף אפשרות לשנות את הרינדור בפועל שלו ל-HTML. ספציפית, אם את רוצה להוסיף Attribute (כלומר להוסיף בתגית התגית זוג של מפתח-ערך כמו Onmouseover כמפתח ו-alert כערך) תוכלי לגשת ל-Attributes של כל תא ובאמת להוסיף את הזוג של מפתחות-ערכים האלו.
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { foreach (TableCell curTableCellToAddJavaScriptTo in e.Row.Cells) curTableCellToAddJavaScriptTo.Attributes.Add("onmouseover", "alert('Kaboom!');"); }​
בדוגמה הזו עברנו בלולאה על כל התאים בשורה הנוכחית שנוצרה ואמרנו "תוסיף לרנדור צד לקוח מאפיין בשם onmouseover שמבצע עם הערך הזה". בצד לקוח, הדפדפן רואה את זה וידוע לזהות את זה כאירוע ג'אווה סקריפט וכל פעם שנעביר עכבר מעל תא כלשהו נקבל התראה "Kaboom1". עכשיו נרצה למשל להגיד שכל פעם שהעכבר נכנס לתא מסויים בטבלה נרצה לצבוע את התא המסויים הזה בצבע כלשהו.
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { foreach (TableCell curTableCellToAddJavaScriptTo in e.Row.Cells) curTableCellToAddJavaScriptTo.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Pink';"); }​
ובאמת, כל פעם שהעכבר יכנס לשורה מסויימת בטבלה היא תצבע בוורוד. נוסיף לזה שאנחנו רוצים שכל פעם שהעכבר יוצא מאותו שורה לצבוע אותה למשל בלבן.
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { foreach (TableCell curTableCellToAddJavaScriptTo in e.Row.Cells) { curTableCellToAddJavaScriptTo.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Pink';"); curTableCellToAddJavaScriptTo.Attributes.Add("onmouseout", "this.style.backgroundColor = 'White';"); } }​
בעיה נוספת שקיימת לנו היא שהכותרת נצבעת, ובהתאם נרצה לדאוג שאנחנו צובעים רק שורות שהם לא מיוחדות (הכותרת, תחתית הרשימה וכך הלאה).
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) foreach (TableCell curTableCellToAddJavaScriptTo in e.Row.Cells) { curTableCellToAddJavaScriptTo.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Pink';"); curTableCellToAddJavaScriptTo.Attributes.Add("onmouseout", "this.style.backgroundColor = 'White';"); } }​
ה-Enum בשם DataControlRowType מאפשר לנו לבדוק קצת יותר לעומק את השורה הנוכחית שאנחנו עובדים מולה ובאמת לבדוק את האופי היותר ספציפי שלה. למשל גם קיים סוג שורה שהוא "שורת מידע ריקה" שאולי נחליט לא לרנדר אותה. נרחיב את הדיון לעבור על כל השורה ולא כל תא, ובמקום לולאה על כל התאים נוסיף את הסקריפטים האלו לשורה עצמה.
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Pink';"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = 'White';"); } }​
וזהו בגדול על צביעת תאים ושורת ב-GridView. אפשר ורצוי מאוד לפתח את הדוגמה הזו הלאה כדי שתפעל יותר טוב מבחינת HTML. - לכל שורה מתרנדר הסקריפט הזה מחדש וחבל על המקום שזה תופס בדף ה-HTML שלנו. אפשר היה להכניס את הסקריפט הזה לתוך פונקציית ג'אווה סקריפט שמתרנדרת פעם אחת וכל פעם לקרוא לה במקום לכתוב את הסקריפט מחדש. - אפשר היה להחזיר את השורה לצבע המקורי שלה (עם שמירה של משתנה גלובלי ברמת הדף אצל הלקוח על הצבע האחרון של השורה ששונתה) ולא לצבע שקבוע Hard-coded. - אפשר להכניס את האפשרויות CSS שאנחנו מכוונים לתוך מחלקת CSS ספציפית שגם היא תתרנדר רק פעם אחת ולקבוע את שם המחלקה (className בצד לקוח, CssClass בצד שרת) של ה-CSS אליו שייכת השורה. - אפשר להכניס את כל ההיגיון הזה לתוך GridView שהיא רק קובץ מחלקה ולא בדף ספציפי וככה להשתמש ביכולת הזו מחדש בכל פעם בלי להעתיק קוד ברחבי האפליקציה.
 
למעלה