שאלה בעניני DataGrid

שאלה בעניני DataGrid

שלום לכולם יש לי שאלה: אני כותבת בASP.NET וC# בסביבת העבודה של Visual Studio.NET שמתי dataGrid ובו עמודה אחת מסוג template המכילה textBox והתוכן שלה לקוח מטבלה כך:
<asp:TemplateColumn HeaderText="path"> <ItemTemplate> <asp:TextBox id=PathTextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.path") %>' > </asp:TextBox> </ItemTemplate> </asp:TemplateColumn>​
חוץ מזה שמתי לחצן על הדף שתפקידו לרוץ על כל הDataGrid ולעדכן את כל הטקסט בטבלה והקוד:
string path; for (int i=0;i<DataGrid1.Items.Count;i++) { path=((TextBox)DataGrid1.Items.FindControl("PathTextBox")).Text.Trim(); //כאן יש את הקוד של העידכון בטבלה {

אני מריצה את התוכנית עם BreakPoint על השורה path= ואפילו אם אני משנה את הטקסט ב-DataGrid תמיד אני מקבלת חזרה את הטקסט לפני השינוי כאילו לא שיניתי את הטקסט ויותר מזה: כשאני מסימת את הפונקציה אז הDataGrid נראה כאילו לא שיניתי כלום אני מקוה שהסברתי את עצמי טוב ושלמישהו יהיה פתרון לבעיה תודה רבה
 
איך אתם מסבירים את זה?

ניסיתי דרך אחרת: את העמודה מסוג Template לא מילאתי באמצעות ה-DataBinder אלא בקוד עצמו אחרי הפונקציה DataBind רצתי על הכל הרשומות של הDataGrid והוספתי להם TextBox כך:
for (int i=0;i<DataGrid1.Items.Count;i++) { TextBox TB=new TextBox(); TB.Text=DataGrid1.Items.Cells[6].Text;//זו עמודה שמכילה את הטקסט אבל היא לא נראית. TB.ID="PathTextBox"; DataGrid1.Items.Cells[0].Controls.Add(TB); }

זהו - עכשיו אני יכולה לקבל את הטקסט, והוא לא הופך למה שהוא היה קודם, למה? אם כך אז מה הקטע בכל הDataBinder הזה אני דוקא הייתי מאד מרוצה אם לא היה צריך לרוץ על כל הטבלה כל פעם.
 

gilad g

New member
כמו שכתבתי למטה

אם תראי לי את המתודה שבה את עושה DataBind, אני חושב שאוכל לומר מהי הבעיה
 

gilad g

New member
הממממ

איפה את עושה DataBind
תראי לי בבקשה את כל המתודה שבה ה-DataBind נמצא
 
בבקשה

public void BindGrid() { sqlDataAdapter1.SelectCommand.CommandText="select * from Tbl"; sqlDataAdapter1.Fill(serverDataSet11); DataGrid1.DataSource=serverDataSet11.Tables[0].DefaultView; DataGrid1.DataBind(); }​
אני קוראת לפונקציה הזאת מתוך ה-Page_Load, עכשיו הוספתי את הקטע שאני עוברת על הטבלה ומכניסה את הטקסט המתאים לתוך ה-TextBox. דבר שנראה לי מטופש לחלוטין, (כמובן בטבלה עצמה הורדתי את הTextBox, ונשארה רק העמודה של הtemplate כשהיא ריקה).
 
ועוד משהו

ה-page_load
private void Page_Load(object sender, System.EventArgs e) { if (! IsPostBack) { if( sqlConnection1.State==ConnectionState.Closed) sqlConnection1.Open(); } BindGrid(); }​
 

gilad g

New member
אההה, עכשיו הכל ברור ../images/Emo13.gif

ב-Page_Load, תכניסי את ה-BindGrid לתוך ה-If של הפוסטבאק:
private void Page_Load(object sender, System.EventArgs e) { if (! IsPostBack) { if( sqlConnection1.State==ConnectionState.Closed) sqlConnection1.Open(); BindGrid(); } }​
הסיבה היא שבכל פוסטבאק (ולכן בכל פעם שקראת לפונקציית השינוי), הנתונים היו נטענים מחדש מה-DB, כשבעצם אין צורך בכך - זה כבר נשמר ב-ViewState
 

yuval k

New member
מתכנתים "פסיכים" ושאר ירקות ../images/Emo26.gif

קודם כל, יש להבהיר: אין פסיכים
לכל מתכנת, מקצועי או חובב, מתחיל או מנוסה, יש שגיאות קטנות ומעצבנות שכלכך קשה לתפוס, וכשמוצאים לא מאמינים איך זה השתחל פנימה... אני למשל שרפתי איזו רבע שעה טובה כדי למצוא שגיאה קטנה: ב-watch היה לי = במקום ==, וכך כל פעם שהגעתי ל-breakpoint הוא עשה השמה לערך... במקום להשוות. אין למי שלא חווה את זה מושג עד כמה זה מעצבן. וכששוכחים משפט מחוץ ל-block של if מאוד קשה לעלות על זה... וזה בהחלט קורה לכולם: גם למתכנתים בכירים במקום שעבדתי בו
אז, שוב, אף אחד לא פסיכי, ותמיד אנחנו שמחים לעזור - יש דברים שצריך לראות מזווית אחרת כדי למצוא. כולם מוזמנים לשאול
כמו שאמר הלל הזקן: "..ולא הביישן למד, ולא הקפדן מלמד" (מסכת אבות, פרק ב', משנה ו')
 
../images/Emo26.gif../images/Emo26.gif שאלה חדשה../images/Emo70.gif

טוב, בסדר אז אני לא פסיכית.... תודה שהעלתם את הביטחון העצמי שלי ועכשיו שאלה חדשה: אני מנסה לקרוא לדיאלוג של פתיחת קבצים: OpenFileDialog, אבל אני מקבלת הודעת שגיאה כזו:
The type or namespace name 'OpenFileDialog' could not be found (are you missing a using directive or an assembly reference?)​
אני מבינה שחסר ל using הבעיה היא שאני לא יכולה להשתמש ב using של windows כי הוא לא מכיר את זה. (אני כותבת ב-ASP.NET) System.Windows.Forms.OpenFileDialog מה לעשות???
 

yuval k

New member
OpenFileDialog הוא קונטרול ששייך ל-

WinForms, ולכן לא ניתן להשתמש בו ב-ASP.net. מדוע את צריכה אותו?
 
כי...

בתוכנית שלי אני מבקשת מהמשתמש להגיד לי באיזה נתיב במחשב שלו נמצא קובץ מסוים, יש לי גישה למחשב שלו (רשת פנימית) ואז אני קוראת את הקובץ. יש לך רעיון אחר...
 

yuval k

New member
ויש דוגמא מאוד מוכרת לזה...

בטופס שליחת הודעה בתפוז
 

IgalR

New member
במקרה נתקלתי בקישור עם הסבר הגיוני

מאוד לשימוש בHttpModule http://www.aspnetemail.com/samples/emailtracker/default.aspx
 
../images/Emo41.gifשאלה קצת מטופשת../images/Emo26.gif

איך אני מתיחסת לערך שב-input הזה מתוך העמוד של ה-C# זאת אומרת, אני רוצה לדעת מה הpath שכתוב שם מתוך פונקציה בעמוד page.aspx.cs כדי לקרוא את הקובץ.
 

yuval k

New member
אחרי שהטופס נשלח../images/Emo35.gif

אם לא שינית את ה-enctype של הטופס, אז ה-path נגיש כמשתנה querystring רגיל - כך לפחות הראו הניסיונות שלי. אני לא מוצא משהו שיאשר את זה
HTH..
 
למעלה