שינוי מחלקת הבסיס של ההפניה לטאביוטר בערכת נתונים מוקלדת

תאריך יצירת דף :

קוד ליצירה וליצירה של ערכת נתונים מוקלדת

ערכת נתונים מוקלדת מאפשרת לך ליצור DataTable שמכיל מידע על הסוג עבור כל עמודה המבוססת על SQL, או על-ידי מעבר Tab המפשט אינטראקציה בין נתונים עם DB בהתבסס על DataTable מוקלד.

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

השלב הראשון הוא הוספת ערכת נתונים כפריט חדש לפרוייקט. , השם הוא כל דבר. אבל זה נשאר כאן

פתח את ערכת הנתונים והוסף מעצב הפניות לטאביטר.

בצע את האשף כדי ליצור DataTable ו-מעבר Tab.

אני חושב שהטופס הבא עשוי להיות דוגמה לאחזור ושימוש ברשומות ממסד הנתונים באמצעות DataTable והיישום Tabter שיצרת. (זוהי רק דוגמה.)

public Form1()
{
  InitializeComponent();

  using (var adapter = new 金額集計TestTableAdapter())
  {
    var table = adapter.GetData();

    foreach (var row in table)
    {
      Trace.WriteLine(string.Format("{0}:{1}", row.年月, row.金額));
    }
  }
}

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

עם זאת, מחלקת ה-Tabapter שנוצרה מ-DataSet נוצרת למעשה באופן אוטומטי על-ידי הקוד. כמו כן, מכיוון שמחלקת Tab, מחלקה זו יורשת את המחלקה Component, אין שיטות או מאפיינים בהם ניתן להשתמש במשותף באמת. אין באפשרותך להעביר מחלקת בסיס לפעולת שירות כדי לקרוא לפעולה הקשורה להפניה מסוג tabter.

בנוסף, sql בשימוש פנימי, sqldataadapter תאם המשמש גישה למסד הנתונים, וכו ' מוצהר מוגן, כך שאתה לא יכול לגעת בהם מבחוץ.

עם זאת, כפי שאתה מצהיר על שיטות ומאפיינים שהוצהרו בהגנה, באפשרותך לגעת בהם על-ידי יצירת מחלקה היורשת את מחלקת Tabapter, ולמחלקה זו של Tabapter יש משנה חלקית, כך שבאפשרותך להצהיר על שיטה או מאפיין אחרים כדי להרחיב את התהליך. באפשרותך גם ליצור מאפיין חדש כדי לקבל את המאפיין הפנימי, כמו בקוד הבא:

using System.Data.SqlClient;
namespace DataSetBaseAdapter {
    public partial class DataSet1 {
    }
}

namespace DataSetBaseAdapter.DataSet1TableAdapters
{
  public partial class 金額集計TestTableAdapter
  {
    public SqlDataAdapter InnerAdapter
    {
      get { return Adapter; }
    }
  }
}

באפשרותך להשתמש ב-Tabapter זה כדי לראות שיש לך גישה למאפיינים המורחבים.

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

שינוי מחלקת הבסיס של ההפניה לטאבטר

כפי שהוזכר קודם לכן, מחלקת ה-Tabהמתקדמת יורשת את המחלקה Component ומקשה על שיתוף העיבוד. אם תשנה את חלק הקוד שיורש מחלקה, הקוד נוצר באופן אוטומטי, כך שעדכון ה-DataSet יחזיר שוב את הקוד. אם אתה יכול, אתה יכול לכתוב מחלקה חלקית שיורשת ממשק בקובץ נפרד, אבל זה לא הגיוני הרבה מכיוון שאתה צריך לכתוב כמה שיותר Tabters כמו שיצרת.

למעשה, יש מנגנון לשינוי הירושה של מחלקת הטאבטר הזאת. . אני רוצה להסביר את ההליך

תחילה, צור את המחלקה שברצונך לרשת. מחלקת Tabapter ירשה במקור את המחלקה ' רכיב ', כך שעליך לרשת את המחלקה ' רכיב ' גם אם תיצור אותה. אני אכתוב את הקוד שאני רוצה לשתף כאן, אבל אני פשוט אכתוב מחלקה. התאם את טווח השמות למה שיצרת.

using System.ComponentModel;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
  }
}

לאחר מכן פתח את מעצב ערכת הנתונים ובחר את ההפניה החוצה שיצרת.

לחץ לחיצה ימנית כדי לפתוח את המאפיין. יש מאפיין בשם BaseClass שאמור להיות בתחילה "מערכת. רכיב מודל. Component". תכתוב את זה לכיתה. שהרגע יצרת אני אכתוב הכל, כולל מרחב השמות.

אם תשמור אותו, תראה שהמחלקה הבסיסית של ההפניה לטאבלמטר השתנתה. על-ידי הגדרת הפעולה לכל מעבר Tab, באפשרותך לכתוב עיבוד משותף למחלקת הבסיס.

לדוגמה, אם ברצונך לגשת למתאם SQL או SQLDataAdapter תאם פנימי, כתוב: מתאמים ואוספי פקודות הנוצרים באופן אוטומטי הם רק מאפיינים שנוצרו על-ידי היורשים או המחלקה, כך שלא ניתן לגעת בהם ישירות מהיורשים. הקוד הבא משתמש בשיקוף כדי לכפות גישה.

using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
    public SqlDataAdapter InnerAdapter
    {
      get
      {
        return (SqlDataAdapter)GetType().GetProperty("Adapter",
          BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
      }
    }

    public SqlCommand[] InnerCommandCollection
    {
      get
      {
        return (SqlCommand[])GetType().GetProperty("CommandCollection",
          BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
      }
    }
  }
}

באפשרותך לראות שבאפשרותך להשתמש ב-Tabapter כדי לגשת למאפיינים של המחלקה שעברה בירושה.