תצוגה של מעברי שורה בdatagridview
-
לא הבנתי, בתיבה בDataGridView הטקסט שבור לשתי שורות או לא?
חוץ מזה נסה בזמן הדיבאג לצפות בערכיהם של הdataGridView1.SelectedRows[0].Cells[1].Value וגם של הrichTextBox, ואז תדע למה הוא לא מוצא ולא רק תשער. ואז אני רוצה לדעת באיזה מהם לא מופיע תוי השבירת שורה כי זה משונה בעיני.פורסם במקור בפורום CODE613 ב03/09/2017 14:15 (+03:00)
-
בתבה עצמה הוא באמת נראה שבור. וכן בגרידויו
ןבאמת כך עשיתי, ניסתי פעמיים. גם בחיפוש, שאז הוא מוצא אותו, וגם אחרי זה שאני רוצה להחליף אותו הוא מראה אותו ג"כ ככה בדיבאג."@10דא'\r@20@30דאחד @40" ככה בחיפוש והוא מוצא אותו באמת על התבה.
"@10דא'\r@20@30דאחד @40" ככה זה כשאני בא להחליף אותו, אבל בפועל הוא לא מחליף את זה."@10\rעכ"פ@20@30 על כל פנים@40"
"@10\rעכ"פ@20@30 על כל פנים@40"אני שם לב שבשני אלו זה לא עובד חלק כי יש את / ל- r ויש את ה/ ל" או '. האם זה יכול להיות הסיבה?
פורסם במקור בפורום CODE613 ב03/09/2017 14:27 (+03:00)
-
זה עובד מצוין בכל שאר המחרוזות אבל לא באלו שיש בהם שבירת השורות.
יש קובץ טקסט שנטען לתבת טקסט עשירה מאוד.
יש טבלה שיש שם כל מיני מחרוזות לפי כל מיני פרמטרים.
בוחרים אותם בטבלה ואחרי זה עושים להם חיפוש והחלפה על התבה העשירה.כל מה שנבחר, מוחלף היטב והכל בסדר.
כל מה שהוא עם מעבר שורה כלשהוא לא עובד. כלומר הוא אמנם מוצא אותו אם אני מחפש אותו, אבל לא מחליף אותו.
נראה לי שמכיון שיש @ /r " ' שהם תווים בעייתים אולי הוא לא משייך אותם נכון למחרוזת שאני רוצה. כלומר שהסלאש לא מתפרש נכון במחרוזת, ואז הוא כאלו מחפש את האות R האמיתית ולא מוצא אותה ולכן הוא ממשיך הלאה.
הקוד של החחלפה נראה משהו כזה:foreach (DataGridViewRow item in dataGridView1.Rows) { if (Convert.ToBoolean(item.Cells[0].Value) == true) { var str = "@10"+ item.Cells[1].Value.ToString()+"@20@30" + item.Cells[2].Value.ToString()+"@40"; text = text.Replace(str, "@50" +item.Cells[1].Value.ToString() +"@51"); }
פורסם במקור בפורום CODE613 ב03/09/2017 15:46 (+03:00)
-
לא יודע לעזור, אבל אין כזה מושג תווים בעייתיים. @ זה תו רגיל לגמרי, ו\r זה תו שרק מוצג בVS בצורה כזאת, במציאות זה תו לבן שמשמש לקפיצת שורה אבל הוא עדיין כמו כל תו אחר.
בגלל שלא כל הקוד מול עיני אני עדיין מעיז לומר שיש לך טעות לוגית והטקסט שאתה מחפש באמת לא קיים והעקביות של ה\r היא מקרית או לא נכונה... לשכל שלי בינתיים אין ברירה...פורסם במקור בפורום CODE613 ב03/09/2017 16:42 (+03:00)
-
בכל שאר המקרים זה עובד היטב, ובשני המקרים הריחוף בדיבאג הראה לי את מה שהובא לעיל.
ואמנם, קטונתי, כידוע ובאמת כל אלו הם תווים רגילים, אך - מכיון שעסקינן באותיות עבריות שכיוונם הוא RTL, ואותיות עבריות יש להם נגידויות חזקה כלומר שתמיד הסמכיות של שניהם תהיה מימין לשמאל, תווים אלו כמו מספרים יש להם נגידות חלשה, והם יורשים את הכיון שלהם ממה שלידם. ויתכן שהתו השטרודל עצמו נחשב כאילו היה אנגלית, וכן המסםרים כידוע וכן האות r שהיא בעצמה באנגלית. אולי זה הסיפור, לא יודע. (וזה סיוט יודע בעימוד ממל דו לשוני, עם הסוגריים שנדבקות וכו')אני רואה שהבעיה היא בשורה הזו: (שזה בעצם מה שהיה שהוא מראה אבל לא מחליף)
text = text.Replace(str, "@50" +item.Cells[1].Value.ToString() +"@51");
שהוא נשאר אותו דבר ולא מחליף, וזאת משום שאי אפשר לומר לו שיעשה REPLACE כאילו היה rtl. אבל בחיפוש בתצוגה מכיון ששינהם rtl אז זה טוב.
ככה אני משער.ואחרי כתבי כל זאת , חפשתי בכיון הזה ומצאתי את זה בסטאק (עדיין לא ניסיתי אצלי)
https://stackoverflow.com/questions/16313765/how-can-i-get-this-string-replacement-in-hebrew-to-work
פורסם במקור בפורום CODE613 ב03/09/2017 23:04 (+03:00)
-
שניהם מביאים אותה תוצאה 25 28
למרות שאנו רואים אותה אחרת. כדבריך.
jsvar t ="@10\rעכ\"פ@20@30 על כל פנים@40" alert(t.indexOf('@40') + " " + t.length )
C#
public static void Main() { var str = "@10\rעכ\"פ@20@30 על כל פנים@40"; Console.WriteLine(str.IndexOf("@40") + " " + str.Length); }
פורסם במקור בפורום CODE613 ב04/09/2017 11:03 (+03:00)