TreeView and XmlDataSource

25 בפברואר 2010

  נניח שרוצים לקשר בין TreeView לבין קובץ xml   נקח לדוגמא את קובץ שערי המטבעות מבנק ישראל (שאפשר גם לעבוד איתו מקוד)   ונרצה להציג אותו ב - Tree   כשנכתוב קוד כזה   <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1"> </asp:TreeView>   <asp:XmlDataSource ID="XmlDataSource1" runat="server"     DataFile="~/currency.xml"></asp:XmlDataSource>     נקבל תוצאה כזאת       כלומר נקבל את המבנה ולא את המידע בעצמו.   כדי לפתור את זה נצטרך להוסיף Binding ל - TreeView   הכי קל זה בעזרת ה - Designer           נוסיף את המאפיינים שאנחנו רוצים לראות ונבחר ב - TextField את הערך המתאים.   בסופו של דבר נקבל   <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1">     <DataBindings>         <asp:TreeNodeBinding DataMember="NAME" TextField="#InnerText" />         <asp:TreeNodeBinding DataMember="UNIT" TextField="#InnerText" />         <asp:TreeNodeBinding DataMember="CURRENCYCODE" TextField="#InnerText" />         <asp:TreeNodeBinding DataMember="COUNTRY" TextField="#InnerText" />    ...
תגיות: , , ,
תגובה אחת

השמעה קולית של טקסט מתוך הקוד

23 בפברואר 2010

  לאחרונה בשיטוטים שלי מצאתי dll שיש לו יכולות מדהימות של השמעת טקסט (והקלטה)   צריך להוסיף reference ל - System.Speech     שימו לב לקוד הבא:   string textToSpeak = Console.ReadLine(); SpeechSynthesizer ss = new SpeechSynthesizer(); ss.Speak(textToSpeak);   ומהרמקולים של המחשב נשמע את הטקסט שהמשתמש הקליד.   למחלקה הזאת יש המון יכולות.   החל משליטה על העוצמה והמהירות, האפשרות להחליט להיכן ינותב הפלט (האם לרמקול או לקובץ wav)   אפשר לקבל events מה הסטטוס של השמעת הטקסט, בעזרת רישום לאירוע SpeakProgress (ויש עוד כמה אירועים מעניינים)   אפשר לבנות מחרוזת להשמעה עם סגנונות (כלומר חלק מהטקסט יותר גבוה חלק מהר יותר וכדו')  בעזרת מחלקה שנקראת PromtBuilder   אפשר להפעיל את ההשמעה בצורה אסינכרונית בעזרת המתודה SpeakAsync (וכמובן שאפשר לבטל אותה...
תגיות: ,
4 תגובות

Command Line Args (string[] args)

21 בפברואר 2010

  כל Console Application שאנחנו כותבים נראה כך:   static void Main(string args) {   }   הפוסט הזה ידבר על "מה זה ה - args שאנחנו רואים ואיך שולחים פרמטרים לשם ואיך ניתן לגשת לפרמטרים ממתודות אחרות (בלי לשלוח את ה - aegs כפרמטר)."     הרבה תוכניות מסוג Console כשהן עולות צריכות לקבל מהמשתמש ארגומנטים כדי לדעת מה לעשות (בדרך כלל שם הפקודה בתוספת ? / תציג את כל האפשרויות. לדוגמא - אני מניח שכולם מכירים את הפקודה dir שמציגה רשימת קבצים ותיקיות - אם נכתוב   dir /? נקבל את כל האפשרויות להפעלה - לדוגמא dir /a r תציג רק את הקבצים שהם ReadOnly.     אז איך שולחים פרמטרים ?   בחיים האמיתיים (כלומר כהלקוח...
תגיות:
אין תגובות

Open new window in Windows 7

18 בפברואר 2010

  דימה הראה לי טריק מגניב של Windows 7 שלא הכרתי.   לחיצה עם הלחצן האמצעי בעכבר על אחד מהחלונות ב - TaskBar ישכפל את החלון.   לדוגמא - אם אני רוצה לפתוח Internet Explorer חדש - הדרך הכי מהירה היא ללחוץ עם הלחצן האמצעי של העכבר על האיקון של IE.   תנסו ותהנו.
תגיות: ,
אין תגובות

זכירת ה – items שנכתבו ב – aspx ל – ListControl גם אחרי שעושים Bind

  אני מניח שיצא לכם לכתבו קוד כזה   <asp:DropDownList ID="ddl" runat="server">     <asp:ListItem Text="Select Item"></asp:ListItem> </asp:DropDownList>   ואם רציתם לקשר רשימה כלשהי בצד השרת     IEnumerable<int> list = Enumerable.Range(0, 10); ddl.DataSource = list; ddl.DataBind();     הבעייה בקוד הזה שזה מוחק את ה - Select Item והבעייה הגדולה בדרך כלל במקרה הזה שאם נרשמתם לאירוע של SelectIndexChanged כדי לבחור את הראשון תצטרכו קודם לבחור את השני ורק אחרי זה תוכלו לבחור את הראשון.   מה שגיליתי לא מזמן - זה את המאפיין AppendDataBoundItems וזה נראה כך   <asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="true">     <asp:ListItem Text="Select Item"></asp:ListItem> </asp:DropDownList>   ועכשיו ה - Bind יוסיף את הערכים ולא ידרוס.
תגיות: , , , ,
אין תגובות

קריאה מקובץ Config אחר

17 בפברואר 2010

    בתפוז עלתה שאלה, איך ניתן לקרוא מידע מקובץ קונפיג חיצוני (כלומר - לא הקונפיג של ה - exe שמריץ את התוכנית)   הנה דוגמא     string path = @"bin\Debug\ConsoleApplication1.exe";   Configuration config = ConfigurationManager.OpenExeConfiguration(path); var a = config.AppSettings.Settings.Value;   ה - path הינו לקובץ ה - exe האחר שיש לו קונפיג.   כדי שזה יעבוד צריך להוסיף referenct ל - System.Configuration
תגיות: ,
אין תגובות

is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

  מה קורה כשאתם עובדים בסביבת X64 ואתם מריצים פונקציות מ - dll חיצוני ואתם מקבלים את השגיאה (או משהו בסגנון) is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)   זה קורה בדרך כלל שאותו dll חיצוני מפעיל native code והוא לא יודע לרוץ בסביבת X64.   מה שאני עושה זה משהו כזה (טיפה עקום אבל הפיתרון הכי פשוט ומהיר)       כותב אפליקצייה Console Application נפרדת שתפעיל את אותם פונקציות - ומקמפל אותה ב - X86.   כעת באפליקצייה שלי (שחייבת כאמור לרוץ ב - X64) אני כותב כך:   var process = System.Diagnostics.Process.Start("process name", "args"); process.WaitForExit();   כעת - אני מפעיל את אותם פונקציות במוד X86 וכשהם מסיימים אני יכול להמשיך לרוץ.   כמובן שבמידה וזה...
תגיות:
אין תגובות

Enum.GetNames – (array of enum not of string)

13 בפברואר 2010

  כשרוצים לרוץ בלולואה על כל ה - האפשרויות ב - enum כלשהו, בדרך כלל רואים קוד כזה     string names = Enum.GetNames(typeof(MyEnum)); foreach (string item in names) {     MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), item);     // logic... }   מה שעשיתי היה לקבל את כל מה שיש ב - enum כמערך של מחרוזות ואז בלולאה להמיר כל אחד ממנו למופע של ה - enum.     כדי לא לכתוב את הקוד (המכוער) כל הזמן אני מעדיך לכתוב כך:   MyEnum names = typeof(MyEnum).GetNames<MyEnum>(); foreach (MyEnum item in names) {     // logic }   וזה מתאפשר לי בזכות ה - Extension Method הבא:   public static T GetNames<T>(this Type enumType) where T : struct {     string names = Enum.GetNames(enumType);     T returnArray =...
תגיות: ,
2 תגובות

Adding a Windows Forms Control to Web page – Part 2

12 בפברואר 2010

  בהמשך לפוסט שהראיתי איך להוסיף Windows User Control לדפי Web (בעזרת ActiveX).   אני רוצה להדגים גישה למאפיינים ולמתודות של ה - User Control.     גישה למאפיינים היא מאוד פשוטה.   כל מאפיין שהוא public אפשר לגשת אליו בעזרת param - לדוגמא:   <object id="UserControl1"         classid="http://localhost/MyApp/ActiveXControls.dll#ActiveXControls.UserControl1">     <param name="BorderStyle" value="FixedSingle" />     <param name="Enabled" value="false" /> </object>   שימו לב שלמאפיין BorderStyle נותנים ערך בלי ה - namespace.   כדי שתוכלו להפעיל מתודות צריך לשנות ב - assembly info את ה - atttibute של ComVisible ל - true     כעת ניתן להפעיל ב - java script מתודות.   נניח שיש את המתודה הבאה ב - User Control   public int Add(int a, int b) {     return a + b; }   ניתן...
תגיות: , , ,
אין תגובות

Adding a Windows Forms Control to Web page

10 בפברואר 2010

  בתפוז עלתה שאלה האם ניתן להוסיף Windows Form Control ל - Web Application.   התשובה היא שזה אפשרי בעזרת ActiveX בצורה הבאה.   מייצרים פרוייקט מסוג Windows Form Conrols   מייצרים את ה - Contorl שלכם (זה יכול להיות עטיפה ל - button פשוט)   אחרי הקימפול מעתיקים את ה - dll לתיקייה של ה - web (לא להוסיף reference - אלא להעתיק את ה - dll לאותה תיקייה שבה יש את הדפים).   כעת ב - aspx שלכם תכתבו כך:   <object id="UserControl1"     classid="http://localhost/MyWebApp/ActiveXControls.dll#ActiveXControls.UserControl1"> </object>   מה שחשוב הוא שה - classid יהיה אל ה - dll ובסוף מוסיפים אנקור # ל - class.   ניתן להוריד דוגמא מכאן.
תגיות: , , ,
2 תגובות