תצוגה של מעברי שורה בdatagridview
-
יש לי dataGridView באפליקצית winformns, שהוא מציג גם שבירת שורות.
היא טוענת מידע מקובץ טקסט נקי, אשר מוצג בrichtextbox סמוך.
אני רוצה לעשות שבחירה של שורה תחפש את הטקסט שלה בתבה האמורה.
עד כאן הכל טוב ויפה. יש שם טקסט אני לקוח אותו ושם אותו בחיפוש.הבעיה היא שאם יש בטקסט בתבה מעבר שורה הוא לא מוצא אותו.
וזאת למרות שבטבלה הוא מציג מעבר שורה.
אני מניח שזה בגלל ה/n/r אשר אמנם נמצאים הן בטבלה והן בתבת הטקסט העמוסה, אבל כשאני טוען אותם הוא מתרגם אותם אחרת.
האם יש דרך בה אוכל שהטבלה תציג את הטקסט הבא
שלום
אני שורה חדשהכ: שלום/n/rאני שורה חדשה
או משהו אחר שאני לו המרה כל שהיא לפני שאני מתחיל איתו בחיפוש כי לא יפה להראות ליוזר/n/r
כרגע הקוד לי נראה כך, בארוע של בחירת שורה
if (dataGridView1.SelectedRows.Count > 0) { richTextBox1.Select(0, 0); var str = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); int startIndex = 0; while (startIndex < richTextBox1.Text.Length) { int wordStartIndex = richTextBox1.Find(str, startIndex, RichTextBoxFinds.None); if (wordStartIndex != -1) { richTextBox1.SelectionStart = wordStartIndex; richTextBox1.SelectionLength = str.Length; richTextBox1.SelectionBackColor = Color.Yellow; richTextBox1.Focus(); } else break; startIndex += wordStartIndex + str.Length; }
פורסם במקור בפורום CODE613 ב03/09/2017 12:30 (+03:00)
-
לא הבנתי, בתיבה ב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)