ΔΙΑΔΙΚΑΣΙΕΣ: Υλοποιεί μια κλάση βοηθητικής εφαρμογής DataSet ΣΥΜΜΕΤΟΧΉ στο Visual C# .NET

Για την Microsoft Visual Basic .NET έκδοση αυτού του άρθρου, ανατρέξτε στην ενότητα

325688 ΔΙΑΔΙΚΑΣΙΕΣ: υλοποιεί μια κλάση βοηθητικής εφαρμογής DataSet ΣΥΜΜΕΤΟΧΉ σε Visual Basic .NET
ΣΗΜΕΊΩΣΗ: αυτό το άρθρο είναι μια σειρά άρθρων DataSetHelper . Μπορείτε να συγχωνεύσετε τον κωδικό της κλάσης DataSetHelper που αναφέρεται σε αυτό το άρθρο με τον κώδικα που παρέχεται σε άλλα άρθρα DataSetHelper για να κάνετε μια συγκεκριμένη κλάση με ένα πιο ολοκληρωμένο σύνολο δυνατοτήτων.


Αυτό το άρθρο αναφέρεται από τα παρακάτω πεδία ονομάτων βιβλιοθήκη κλάσης του Microsoft .NET Framework:
  • System.Data

ΣΕ ΑΥΤΉΝ ΤΗΝ ΕΡΓΑΣΊΑ

Σύνοψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο εφαρμογής και τον τρόπο χρήσης μιας κλάσης DataSetHelper που περιλαμβάνει δείγματα κώδικα για να δημιουργήσετε ένα αντικείμενο DataTable από δύο ή περισσότερους συσχετισμένους ορισμούς DataTable και να αντιγράψετε τις εγγραφές που ταξινομούνται και φιλτράρονται από τα αντικείμενα DataTable της προέλευσης στον προορισμό DataTable.

Για να γίνει αυτό, χρησιμοποιήστε τις ακόλουθες μεθόδους δημόσιο:

  • CreateJoinTable
  • InsertJoinInto
  • SelectJoinInto
Η μέθοδος SelectJoinInto καλεί την CreateJoinTable και τις InsertJoinInto μεθόδους. Μπορείτε επίσης να χρησιμοποιήσετε ένα ιδιωτικό helper μέλη μέθοδος και δεδομένων για την αποθήκευση της λίστας πεδίων αναλύθηκε.

Η κλάση DataSetHelper περιλαμβάνει μια μεταβλητή μέλους DataSet . Προαιρετικά, μπορείτε να αντιστοιχίσετε ένα υπάρχον σύνολο δεδομένων για τη μεταβλητή μέλους DataSet . Εάν η μεταβλητή μέλους οδηγεί σε ένα έγκυρο σύνολο δεδομένων, οποιαδήποτε αντικείμενα DataTable που δημιουργεί το CreateJoinTable ή τη μέθοδο SelectJoinInto προστίθενται στο σύνολο δεδομένων. Σε κάθε περίπτωση, η κλήση της μεθόδου επιστρέφει μια παραπομπή στο αντικείμενο DataTable . Η μέθοδος InsertJoinInto απαιτεί μια υπάρχουσα προορισμού DataTable και δεν επιστρέφει τίποτε.

Για περισσότερες πληροφορίες σχετικά με αντικείμενα DataSet , κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

313485 ΠΛΗΡΟΦΟΡΙΕΣ: χάρτης για ADO.NET DataSet, DataView και DataViewManager

Απαιτήσεις

Η ακόλουθη λίστα περιγράφει το υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που απαιτούνται:

  • Τα Microsoft Windows XP, Windows 2000 ή Windows NT 4.0 Service Pack 6a
  • Microsoft Visual Studio .NET
Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τα ακόλουθα θέματα:

  • Η σύνταξη της Visual C# .NET
  • Βασικά στοιχεία ADO.NET και σύνταξη

Κλάση DataSetHelper κελύφους

Ο κώδικας σε αυτήν την ενότητα δηλώνει την κλάση κελύφους στην οποία όλα τα άρθρα DataSetHelper προσθέσετε μεθόδους και μεταβλητές μέλους.
  1. Ξεκινήστε το Visual Studio .NET.
  2. Στο μενού αρχείο , επιλέξτε Δημιουργίακαι, στη συνέχεια, κάντε κλικ στο έργο.
  3. Στο πλαίσιο διαλόγου " Νέο έργο ", κάντε κλικ στο κουμπί Visual C# έργα στην περιοχή Τύποι έργουκαι, στη συνέχεια, κάντε κλικ στο κουμπί Βιβλιοθήκη κλάσεων στην περιοχή πρότυπα.
  4. Στο πλαίσιο όνομα , πληκτρολογήστε DataSetHelper.
  5. Αντικαταστήστε τον κωδικό κατηγορίας με τον ακόλουθο κώδικα:
    public class DataSetHelper{
    public DataSet ds;

    public DataSetHelper(ref DataSet DataSet)
    {
    ds = DataSet;
    }
    public DataSetHelper()
    {
    ds = null;
    }
    }

    Μπορείτε να χρησιμοποιήσετε τις δύο υπερφορτώσεις για την κατασκευή για να δημιουργήσετε μια παρουσία της κλάσης με ή χωρίς αναφορά σε ένα έγκυρο σύνολο δεδομένων. Για μια κλάση που περιέχει μια αναφορά σε ένα έγκυρο σύνολο δεδομένων, τα αντικείμενα DataTable που επιστρέφουν τις μεθόδους προστίθενται επίσης αυτόματα το DataSet.

Πεδίο λίστας ανάλυσης

Αυτή η ενότητα περιέχει τον κωδικό για μια μονάδα ανάλυσης της λίστας πεδίων. Η δομή που αναλύθηκε χρησιμοποιείται έτσι ώστε να τις CreateJoinTable και τις InsertJoinInto μεθόδους δεν χρειάζεται να νέας ανάλυσης της λίστας πεδίων. Οι μέθοδοι αυτές πρέπει να επανάληψης ανάλυσης λίστα πεδίων εάν ονομάζονται από τη μέθοδο SelectJoinInto ή από τον δικό σας κωδικό. Λίστα πεδίων αναλύθηκε και η λίστα πεδίων δεν έχει αναλυθεί αποθηκεύονται σε ιδιωτικές μεταβλητές μέλους της κλάσης DataSetHelper .

  1. Προσθέστε τον ακόλουθο ορισμό κλάσης ιδιωτικό στην κλάση DataSetHelper που δημιουργήσατε στην ενότητα "Κλάση κελύφους DataSetHelper":
    private class FieldInfo{
    public string RelationName;
    public string FieldName;//source table field name
    public string FieldAlias;//destination table field name
    public string Aggregate;
    }

    ΣΗΜΕΊΩΣΗ: Αυτή η κλάση είναι κοινά σε άλλα άρθρα DataSetHelper και περιέχει ορισμένα πεδία που δεν χρησιμοποιεί αυτό το άρθρο.

  2. Προσθέστε τις παρακάτω μεταβλητές ιδιωτικό μέλος στον ορισμό κλάσης αμέσως μετά τη δήλωση DataSet :
    private System.Collections.ArrayList m_FieldInfo; private string m_FieldList; 
  3. Προσθέστε την ακόλουθη μέθοδο ιδιωτικό στον ορισμό κλάσης. Αυτή η μέθοδος είναι η ίδια με τη μέθοδο που χρησιμοποιείται σε άλλα είδη DataSetHelper .
    private void ParseFieldList(string FieldList, bool AllowRelation){
    /*
    * This code parses FieldList into FieldInfo objects and then
    * adds them to the m_FieldInfo private member
    *
    * FieldList systax: [relationname.]fieldname[ alias], ...
    */
    if (m_FieldList == FieldList) return;
    m_FieldInfo = new System.Collections.ArrayList();
    m_FieldList = FieldList;
    FieldInfo Field; string[] FieldParts;
    string[] Fields=FieldList.Split(',');
    int i;
    for (i=0; i<=Fields.Length-1; i++)
    {
    Field=new FieldInfo();
    //parse FieldAlias
    FieldParts = Fields[i].Trim().Split(' ');
    switch (FieldParts.Length)
    {
    case 1:
    //to be set at the end of the loop
    break;
    case 2:
    Field.FieldAlias=FieldParts[1];
    break;
    default:
    throw new Exception("Too many spaces in field definition: '" + Fields[i] + "'.");
    }
    //parse FieldName and RelationName
    FieldParts = FieldParts[0].Split('.');
    switch (FieldParts.Length)
    {
    case 1:
    Field.FieldName=FieldParts[0];
    break;
    case 2:
    if (AllowRelation==false)
    throw new Exception("Relation specifiers not permitted in field list: '" + Fields[i] + "'.");
    Field.RelationName = FieldParts[0].Trim();
    Field.FieldName=FieldParts[1].Trim();
    break;
    default:
    throw new Exception("Invalid field definition: " + Fields[i] + "'.");
    }
    if (Field.FieldAlias==null)
    Field.FieldAlias = Field.FieldName;
    m_FieldInfo.Add (Field);
    }
    }

Η μέθοδος CreateJoinTable

Αυτή η ενότητα περιέχει τον κωδικό για τη μέθοδο CreateJoinTable .

Ακολουθεί η συνθήκη κλήσης για τη μέθοδο CreateJoinTable :
dt = dsHelper.CreateJoinTable("TestTable", ds.Tables["Employees"],    "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department");

Κλήση αυτό το δείγμα δημιουργεί ένα νέο DataTable με ένα όνομα πίνακα , των TestTable και των τριών πεδίων (FName, LName και τμήμα). Αυτά τα τρία πεδία έχουν τον ίδιο τύπο δεδομένων με το όνομα και τα πεδία "Επώνυμο" του πίνακα "Υπάλληλοι" και το πεδίο DepartmentName στον γονικό πίνακα που είναι προσπελάσιμα μέσω του αντικειμένου DepartmentEmployee DataRelation .


Χρησιμοποιήστε την παρακάτω σύνταξη για να καθορίσετε τα πεδία στη λίστα πεδίων:
[relationname.]fieldname[ alias], ...
Σημειώστε τα εξής όσον αφορά την ακόλουθη σύνταξη:

  • Ιδιότητες τύπου δεδομένων και το ColumnName είναι το μόνο ιδιότητες που έχουν αντιγραφεί στον προορισμό DataTable.
  • Το πρόγραμμα αντιγράφει το αξιολογημένο αποτέλεσμα για πεδία που περιέχουν μια παράσταση.
  • Μπορείτε να μετονομάσετε ένα πεδίο στον προορισμό DataTable , καθορίζοντας ένα όνομα για το ψευδώνυμο.
  • Η λίστα πεδίων μπορεί να περιέχει ένα υποσύνολο των ονομάτων πεδίων που αναφέρονται σε διαφορετική σειρά από τη σειρά στο αρχείο προέλευσης DataTable. Εάν η λίστα πεδίων είναι κενή, μια εξαίρεση.
  • Το DataRelation πρέπει να αφορούν γονικούς πίνακες. Για παράδειγμα, εάν θέλετε να δημιουργήσετε έναν πίνακα που συνδυάζει πεδία από τους πελάτες, τους εργαζόμενους και τους πίνακες παραγγελιών, πρέπει να χρησιμοποιήσετε τον πίνακα "Παραγγελίες" με τον πίνακα προέλευσης και, στη συνέχεια, αναφέρονται σε πεδία σε πίνακες τους υπαλλήλους και τους πελάτες με σχέσεις.
Για να καλέσετε τη μέθοδο CreateJoinTable , προσθέστε την ακόλουθη μέθοδο στην κλάση DataSetHelper που δημιουργήσατε στην ενότητα "Κλάση κελύφους DataSetHelper":
public DataTable CreateJoinTable(string TableName, DataTable SourceTable, string FieldList){
/*
* Creates a table based on fields of another table and related parent tables
*
* FieldList syntax: [relationname.]fieldname[ alias][,[relationname.]fieldname[ alias]]...
*/
if (FieldList==null)
{
throw new ArgumentException("You must specify at least one field in the field list.");
//return CreateTable(TableName, SourceTable);
}
else
{
DataTable dt = new DataTable(TableName);
ParseFieldList(FieldList, true);
foreach(FieldInfo Field in m_FieldInfo)
{
if(Field.RelationName==null)
{
DataColumn dc = SourceTable.Columns[Field.FieldName];
dt.Columns.Add(dc.ColumnName, dc.DataType, dc.Expression);
}
else
{
DataColumn dc = SourceTable.ParentRelations[Field.RelationName].ParentTable.Columns[Field.FieldName];
dt.Columns.Add(dc.ColumnName, dc.DataType, dc.Expression);
}
}
if (ds!=null)
ds.Tables.Add(dt);
return dt;
}
}

Η μέθοδος InsertJoinInto

Αυτή η ενότητα περιέχει κωδικό για τη μέθοδο InsertJoinInto . Η μέθοδος InsertJoinInto αντιγράφει τις εγγραφές που ταξινομούνται και να φιλτράρονται από τον πίνακα προέλευσης και σχετιζόμενους πίνακες στον πίνακα προορισμού. Όταν καλείτε την ιδιότητα ParseFieldList , δυνατότητα ανάλυσης λίστες που έχουν αναλυθεί προηγουμένως, εάν είναι διαθέσιμες αυτές οι λίστες. Εάν η λίστα πεδίων είναι κενή, μια εξαίρεση.


Ακολουθεί η συνθήκη κλήσης για τη μέθοδο InsertJoinInto :
dsHelper.InsertJoinInto(ds.Tables["TestTable"], ds.Tables["Employees"],     "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department", 
"EmployeeID<5", "BirthDate");

Το δείγμα κλήση αντιγράφει εγγραφές από εργαζόμενους DataTable (και το πεδίο DepartmentName ενός σχετικές DataTable) για να TestTable το DataTable, που φιλτράρονται σε "EmployeeID < 5" και είναι ταξινομημένες κατά ημερομηνία γέννησης.

ΣΗΜΕΊΩΣΗ: το φίλτρο και η ταξινόμηση εκφράσεις ισχύουν μόνο για τον πίνακα προέλευσης και όχι για τυχόν σχετιζόμενους πίνακες.

Για να καλέσετε τη μέθοδο InsertJoinInto , προσθέστε την ακόλουθη μέθοδο στην κλάση DataSetHelper που δημιουργήσατε στην ενότητα "Κλάση κελύφους DataSetHelper":
public void InsertJoinInto(DataTable DestTable, DataTable SourceTable,     string FieldList, string RowFilter, string Sort)
{
/*
* Copies the selected rows and columns from SourceTable and inserts them into DestTable
* FieldList has same format as CreatejoinTable
*/
if (FieldList==null)
{
throw new ArgumentException("You must specify at least one field in the field list.");
//InsertInto(DestTable, SourceTable, RowFilter, Sort);
}
else
{
ParseFieldList(FieldList, true);
DataRow[] Rows = SourceTable.Select(RowFilter, Sort);
foreach(DataRow SourceRow in Rows)
{
DataRow DestRow = DestTable.NewRow();
foreach(FieldInfo Field in m_FieldInfo)
{
if(Field.RelationName==null)
{
DestRow[Field.FieldName] = SourceRow[Field.FieldName];
}
else
{
DataRow ParentRow = SourceRow.GetParentRow(Field.RelationName);
DestRow[Field.FieldName] = ParentRow[Field.FieldName];
}
}
DestTable.Rows.Add(DestRow);
}
}
}

Η μέθοδος SelectJoinInto

Αυτή η ενότητα περιέχει τον κωδικό για τη μέθοδο SelectJoinInto . Αυτή η μέθοδος είναι ένας συνδυασμός της CreateJoinTable και τις μεθόδους InsertJoinInto . Η μέθοδος SelectJoinInto δημιουργεί ένα νέο DataTable με βάση τις υπάρχουσες DataTable αντικείμενα και αντιγράφει εγγραφές που ταξινομούνται και φιλτράρισμα στο νέο DataTable.


Ακολουθεί η συνθήκη κλήσης για τη μέθοδο SelectJoinInto :
dt = dsHelper.SelectInto("TestTable", ds.Tables["Employees"],     "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department", "EmployeeID<5", "BirthDate");

Αυτή η κλήση δείγμα δημιουργεί ένα DataTable με το όνομα TestTable με τρία πεδία. Αυτά τα τρία πεδία βασίζονται σε το "όνομα" και τα πεδία "Επώνυμο" των υπαλλήλων DataTable και το πεδίο DepartmentName του DataTable που αναφέρεται από το DepartmentEmployee DataRelation. Στη συνέχεια, αυτό το δείγμα αντιγράφει εγγραφές από εργαζόμενους DataTable για να TestTable το DataTable, που φιλτράρονται σε "EmployeeID < 5" και είναι ταξινομημένες κατά ημερομηνία γέννησης.

ΣΗΜΕΊΩΣΗ: το φίλτρο και η ταξινόμηση εκφράσεις ισχύουν μόνο για τον πίνακα προέλευσης και όχι σε σχετιζόμενους πίνακες.

Για να καλέσετε τη μέθοδο SelectJoinInto , προσθέστε την ακόλουθη μέθοδο στην κλάση DataSetHelper που δημιουργήσατε στην ενότητα "Κλάση κελύφους DataSetHelper":
public DataTable SelectJoinInto(string TableName, DataTable SourceTable, string FieldList, string RowFilter, string Sort){
/*
* Selects sorted, filtered values from one DataTable to another.
* Allows you to specify relationname.fieldname in the FieldList to include fields from
* a parent table. The Sort and Filter only apply to the base table and not to related tables.
*/
DataTable dt = CreateJoinTable(TableName, SourceTable, FieldList);
InsertJoinInto(dt, SourceTable, FieldList, RowFilter, Sort);
return dt;
}

Δοκιμή της εφαρμογής

  1. Αποθηκεύστε και, στη συνέχεια, η μεταγλώττιση της κλάσης DataSetHelper που δημιουργήσατε στις προηγούμενες ενότητες.
  2. Ακολουθήστε τα παρακάτω βήματα για να δημιουργήσετε μια νέα Visual C# εφαρμογή των Windows:
    1. Ξεκινήστε το Visual Studio .NET.
    2. Στο μενού αρχείο , επιλέξτε Δημιουργίακαι, στη συνέχεια, κάντε κλικ στο έργο.
    3. Στο πλαίσιο διαλόγου " Νέο έργο ", κάντε κλικ στο κουμπί Visual C# έργα στην περιοχή Τύποι έργουκαι, στη συνέχεια, κάντε κλικ στο κουμπί Εφαρμογή των Windows στην περιοχή πρότυπα.
  3. Στην Εξερεύνηση λύσεων, κάντε δεξιό κλικ στη λύση και, στη συνέχεια, κάντε κλικ στο κουμπί Προσθήκη υπάρχοντος έργου. Προσθέστε το έργο DataSetHelper.
  4. Στο μενού ' έργο ', κάντε κλικ στο κουμπί Προσθήκη αναφοράς.
  5. Στο πλαίσιο διαλόγου " Προσθήκη αναφοράς ", κάντε κλικ στην καρτέλα " έργα " και στη συνέχεια να προσθέσετε μια αναφορά στο έργο DataSetHelper της εφαρμογής Windows φόρμας.
  6. Στη σχεδίαση φόρμας, σύρετε τρία στοιχεία ελέγχου κουμπί και ένα στοιχείο ελέγχου DataGrid από την εργαλειοθήκη στη φόρμα. Ονομάστε το κουμπιά, btnCreateJoin, btnInsertJoinIntoκαι btnSelectJoinInto. Διατηρήστε το προεπιλεγμένο όνομα για το στοιχείο ελέγχου δεδομένων (DataGrid) (dataGrid1).
  7. Στον κώδικα της φόρμας, προσθέστε την παρακάτω δήλωση Χρήση στο επάνω μέρος του παραθύρου κώδικα:
    using System.Data;
  8. Προσθέστε τις ακόλουθες δηλώσεις μεταβλητών για τον ορισμό της φόρμας:
    DataSet ds; DataSetHelper.DataSetHelper dsHelper;
  9. Προσθέστε τον ακόλουθο κώδικα στο συμβάν Form_Load :
    ds = new DataSet();dsHelper = new DataSetHelper.DataSetHelper(ref ds);
    //Create source tables
    DataTable dt = new DataTable("Employees");
    dt.Columns.Add("EmployeeID",Type.GetType("System.Int32") );
    dt.Columns.Add("FirstName", Type.GetType("System.String"));
    dt.Columns.Add("LastName", Type.GetType("System.String"));
    dt.Columns.Add("BirthDate", Type.GetType("System.DateTime"));
    dt.Columns.Add("JobTitle", Type.GetType("System.String"));
    dt.Columns.Add("DepartmentID", Type.GetType("System.Int32"));
    dt.Rows.Add(new object[] {1, "Tommy", "Hill", new DateTime(1970, 12, 31), "Manager", 42});
    dt.Rows.Add(new object[] {2, "Brooke", "Sheals", new DateTime(1977, 12, 31), "Manager", 23});
    dt.Rows.Add(new object[] {3, "Bill", "Blast", new DateTime(1982, 5, 6), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Kevin", "Kline", new DateTime(1978, 5, 13), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Martha", "Seward", new DateTime(1976, 7, 4), "Sales Clerk", 23});
    dt.Rows.Add(new object[] {1, "Dora", "Smith", new DateTime(1985, 10, 22), "Trainee", 42});
    dt.Rows.Add(new object[] {1, "Elvis", "Pressman", new DateTime(1972, 11, 5), "Manager", 15});
    dt.Rows.Add(new object[] {1, "Johnny", "Cache", new DateTime(1984, 1, 23), "Sales Clerk", 15});
    dt.Rows.Add(new object[] {1, "Jean", "Hill", new DateTime(1979, 4, 14), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Anna", "Smith", new DateTime(1985, 6, 26), "Trainee", 15});
    ds.Tables.Add(dt);

    dt = new DataTable("Departments");
    dt.Columns.Add("DepartmentID", Type.GetType("System.Int32"));
    dt.Columns.Add("DepartmentName", Type.GetType("System.String"));
    dt.Rows.Add(new object[] {15, "Men's Clothing"});
    dt.Rows.Add(new object[] {23, "Women's Clothing"});
    dt.Rows.Add(new object[] {42, "Children's Clothing"});
    ds.Tables.Add(dt);

    ds.Relations.Add("DepartmentEmployee", ds.Tables["Departments"].Columns["DepartmentID"],
    ds.Tables["Employees"].Columns["DepartmentID"]);

  10. Προσθέστε τον ακόλουθο κώδικα στο συμβάν btnCreateJoin_Click :
    dsHelper.CreateJoinTable("EmpDept",ds.Tables["Employees"],     "FirstName FName,LastName LName,BirthDate,DepartmentEmployee.DepartmentName Department");
    dataGrid1.SetDataBinding(ds, "EmpDept");

  11. Προσθέστε τον ακόλουθο κώδικα στο συμβάν btnInsertJoinInto_Click :
    dsHelper.InsertJoinInto(ds.Tables["EmpDept"], ds.Tables["Employees"],     "FirstName FName,LastName LName,BirthDate,DepartmentEmployee.DepartmentName Department",
    "JobTitle='Sales Clerk'", "DepartmentID");
    dataGrid1.SetDataBinding(ds, "EmpDept");

  12. Προσθέστε τον ακόλουθο κώδικα στο συμβάν btnSelectJoinInto_Click :
    dsHelper.SelectJoinInto("EmpDept2", ds.Tables["Employees"],    "FirstName,LastName,BirthDate BDate,DepartmentEmployee.DepartmentName Department", 
    "JobTitle='Manager'", "DepartmentID");
    dataGrid1.SetDataBinding(ds, "EmpDept2");

  13. Εκτελέστε την εφαρμογή και, στη συνέχεια, κάντε κλικ σε κάθε ένα από τα κουμπιά. Παρατηρήστε ότι το DataGrid συμπληρώνεται με τους πίνακες και τα δεδομένα από το πεδίο Κωδ.

    ΣΗΜΕΊΩΣΗ: μόνο επιλέξετε κουμπιά btnSelectJoinInto και το btnCreateJoin μία φορά. Εάν κάνετε κλικ σε κάποιο από αυτά τα κουμπιά περισσότερες από μία φορές, λαμβάνετε ένα μήνυμα λάθους που προσπαθείτε να προσθέσετε τον ίδιο πίνακα δύο φορές. Επιπλέον, πρέπει να επιλέξετε btnCreateJoin πριν κάνετε κλικ στο btnInsertJoinInto; Διαφορετικά, ο προορισμός DataTable δεν δημιουργείται. Εάν κάνετε κλικ στο κουμπί btnInsertJoinInto πολλές φορές, μπορείτε να συμπληρώσετε το DataGrid με διπλότυπες εγγραφές.

Βελτίωση ιδεών

  • Ιδιότητες τύπου δεδομένων και το ColumnName είναι το μόνο ιδιότητες που έχουν αντιγραφεί στον προορισμό DataTable. Μπορείτε να επεκτείνετε τη μέθοδο CreateTable για να αντιγράψετε τις πρόσθετες ιδιότητες, όπως την ιδιότητα MaxLength , ή μπορείτε να δημιουργήσετε νέες στήλες κλειδιού.
  • Η ιδιότητα παράσταση δεν αντιγράφεται; Αντίθετα, το αξιολογημένο αποτέλεσμα αντιγράφεται. Επομένως, δεν χρειάζεται να προσθέσετε πεδία που αναφέρονται από την παράσταση στον πίνακα προορισμού. Επιπλέον, η στήλη προορισμού μπορεί να εμφανίζεται νωρίτερα, στη λίστα αποτελεσμάτων από οποιαδήποτε από τις στήλες που αυτής της στήλης εξαρτάται διαφορετικά. Μπορείτε να τροποποιήσετε τη μέθοδο CreateTable για να αντιγράψετε την έκφραση (στήλη InsertInto παραβλέπει τις στήλες με μια έκφραση), παρόλο που αυτό είναι εντός των ορίων που αναφέρονται παραπάνω σε αυτό το σημείο.
  • Μπορείτε να συγχωνεύσετε τις λειτουργίες του CreateJoinTable, το InsertJoinIntoκαι τις SelectJoinInto μεθόδους σε το CreateTable, το InsertIntoκαι τις SelectInto μεθόδους. Για πρόσθετες πληροφορίες σχετικά με το CreateTable, το InsertIntoκαι τις SelectInto μεθόδους, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

    326009 ΔΙΑΔΙΚΑΣΙΕΣ: εφαρμογή σε ΕΠΙΛΈΞΤΕ το DataSet κλάση βοηθητικής εφαρμογής στο Visual C# .NET
    Εάν δεν θέλετε να συγχωνεύσετε αυτές τις μεθόδους, αλλά αν έχετε και τα δύο σύνολα των μεθόδων σε μια μόνο κλάση, μπορείτε να ενεργοποιήσετε τις CreateJoinTable και τις InsertJoinInto μεθόδους για να χειριστείτε ένα κενό πεδίο λίστας, καταργώντας τις δηλώσεις Throw και από την uncommenting των κλήσεων προς το CreateTable και τις InsertInto μεθόδους με τις παρακάτω γραμμές κώδικα:
        if (FieldList==null)    {
    throw new ArgumentException("You must specify at least one field in the field list.");
    //return CreateTable(TableName, SourceTable);
    }

    - και -
        if (FieldList==null)    {
    throw new ArgumentException("You must specify at least one field in the field list.");
    //InsertInto(DestTable, SourceTable, RowFilter, Sort);
    }

Αντιμετώπιση προβλημάτων

  • Το όνομα πεδίου και τα τμήματα ψευδώνυμο της λίστας πεδίων πληρούν DataColumn συμβάσεις ονομασίας. Το πρόγραμμα ανάλυσης περιορίζει επίσης τα ονόματα, ότι το όνομα δεν πρέπει να περιέχει μια τελεία (.), κόμμα (,) ή ένα (διάστημα).
  • Εάν κάνετε κλικ σε ένα κουμπί περισσότερες από μία φορές, στον ίδιο πίνακα προστίθενται δύο φορές το σύνολο δεδομένων, που έχει ως αποτέλεσμα μια εξαίρεση. Για να επιλύσετε αυτό το ζήτημα, μπορείτε να προσθέσετε κώδικα στην εφαρμογή δοκιμή για να ελέγξετε εάν ένα DataTable το ίδιο όνομα υπάρχει ήδη. Εναλλακτικά, μπορείτε να δημιουργήσετε την κλάση DataSetHelper χωρίς αναφορά σε ένα σύνολο δεδομένων και, στη συνέχεια, η ιδιότητα DataGrid.DataSource η απευθείας σύνδεση με τη μεταβλητή dt αντί για, χρησιμοποιώντας την κλήση της μεθόδου SetDataBinding .
  • Εάν ο πίνακας προέλευσης χρησιμοποιεί τύπους προσαρμοσμένων δεδομένων (δηλαδή, μια κλάση), πρέπει να προσθέσετε κώδικα στη μέθοδο InsertJoinInto για να εκτελέσετε μια βαθιά αντίγραφο των δεδομένων. Διαφορετικά, αντιγράφεται μόνο η αναφορά.
Ιδιότητες

Αναγνωριστικό άρθρου: 326080 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 3

Σχόλια