1

As a newby in c# i am having a problem with getting a datatable being filled from a other datatable that has been build an put in memory. not all columns are needed in the new datatable. Could i get some help here pls.

here's my code so far: where i found a part of my solution. but doen't know how to proceed?

using System;
using System.IO;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.ComponentModel;

public partial class _Planning : System.Web.UI.Page
{
ConnectionStringSettings Leerstoftabel;
SqlConnection connection;
int cursusID = 2;
DataTable LeerstofTabel;
DataTable Planning;


protected void Page_Load(object sender, EventArgs e)
{
    Leerstoftabel = ConfigurationManager.ConnectionStrings["CursusPlanner"];
    connection = new SqlConnection(Leerstoftabel.ConnectionString);

    SqlCommand cmd = connection.CreateCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT cursus.naam AS [Cursus Naam], vak.vaknaam, cursusvak.volgnummer, les.dagnummer, les.hoofdstuknummer, les.naam AS [Les Naam], les.lesomschrijving FROM cursus INNER JOIN cursusvak ON cursus.cursusID = cursusvak.cursusID INNER JOIN vak ON cursusvak.vakID = vak.vakID INNER JOIN les ON vak.vakID = les.vakID WHERE(cursus.cursusID = @cursusID)ORDER BY cursusvak.volgnummer";

    //int cursusID = Convert.ToInt32(DropDownList1.SelectedValue);
    cmd.Parameters.Add("@cursusID", SqlDbType.Int, 0).Value = cursusID;

    connection.Open();

    //het creeëren van een datatabel
    DbDataReader rdr = cmd.ExecuteReader();
    LeerstofTabel = new DataTable();
    LeerstofTabel.Load(rdr);

    connection.Close();
}


protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    // weekend days can't be selected in calendar
    if (e.Day.IsWeekend)
        e.Day.IsSelectable = false;
}

protected void Button1_Click(object sender, EventArgs e)
{
    //create the DataTable named "Planning"
    Planning = new DataTable ("Planning");

    //Add the DataColumn using defaults
    DataColumn datum = new DataColumn("Datum");
    datum.DataType = typeof(DateTime);
    datum.AllowDBNull = false;
    datum.Caption = "Datum";
    Planning.Columns.Add(datum);

    //Add the DataColumn using defaults
    DataColumn hoofdstuk = new DataColumn("Hoofdstuk");
    hoofdstuk.AllowDBNull = false;
    hoofdstuk.Caption = "Hoofdstuk";
    Planning.Columns.Add(hoofdstuk);

    //Add the DataColumn using defaults
    DataColumn omschrijving = new DataColumn("Omschrijving");
    omschrijving.AllowDBNull = false;
    hoofdstuk.Caption = "Omschrijving";
    Planning.Columns.Add(omschrijving);

    //Add the DataColumn using defaults
    DataColumn lessen = new DataColumn("Lessen");
    lessen.AllowDBNull = false;
    lessen.Caption = "Lessen";
    Planning.Columns.Add(lessen);


    for (int i = 0; i < LeerstofTabel.Rows.Count; i++)
    {
        if (LeerstofTabel ["vaknaam"]).ToString() != vorigvak  // this statement doesn't work
        {
            DataRow newplannning = Planning.NewRow();
            newplannning["Datum"] = "";
            newplannning["Hoofdstuk"] = "*" + LeerstofTabel["vaknaam"];
            newplannning["Omschrijving"] = "";
            newplannning["Lessen"] = "";
            Planning.Rows.Add(newplannning);

        }

        Vorigvak = (LeerstofTabel["vaknaam"])ToString();
    }


    GridView1.DataSource = Planning;
    GridView1.DataBind();
4

3 回答 3

0

Use for loop with main Datatable and check which are the columns should be imported to new datatable. Then copy the data.

于 2012-10-29T09:14:19.097 回答
0

If you are interested in copying,you can do this

DataTable newTable;
newTable= OldTable.Copy();
于 2012-10-29T09:36:12.403 回答
0

One approach using DataTable would be using:

int index; //the index of column u want to remove
string columnName; // name of the column you want to remove
DataTable dt;
dt= dtMain.Copy();
dt.Columns.RemoveAt(index); //or
dt.Columns.Remove(columnName);

Using remove or remove at you remove the columns that you do not want.

Other approach would be using list of objects and copying data from a datatable. For example:

List<SomeClass> info;
foreach (DataRow dr in dt.Rows)
{
info = new SomeClass { para1 = dr["col1"], para2 = dr["col2"], para3 = dr["col3"]};
}
Choose which ever is appropriate for your case.

于 2012-10-29T10:01:22.087 回答