Как записать каждый раз в новую строку таблицы данных? - PullRequest
0 голосов
/ 03 августа 2010

Как я могу вставлять каждый раз разные строки в datatable?Таблица данных используется в dataGridView для записи журнала.Мне нужно каждый раз писать в отдельной строке (строке) в таблице данных, когда я не могу знать, сколько строк мне нужно во время выполнения.Еще одна вещь;таблица данных загружается из файла XML, поэтому в таблице данных уже могут быть строки.

Что я могу сделать?(короче говоря, я всегда пишу в одной и той же строке) в C #

EDIT: вот код:

По какой-то причине DateGridView имеет только одну строку (это метод, который активировалодним нажатием кнопки)

public void gridStart(string i, string b, string c)
        {
            DataTable dt = new DataTable();//empty table with no schema
            DataColumn colContactID = new DataColumn("Date", typeof(string));
            DataColumn colContactName = new DataColumn("Caller", typeof(string));
            DataColumn colResult = new DataColumn("Result", typeof(string));
            dt.Columns.Add(colContactID);
            dt.Columns.Add(colContactName);
            dt.Columns.Add(colResult);
            DataRow row = dt.NewRow();
            row["Date"] = i;
            row["Caller"] = b;
            row["Result"] = c;
            dt.Rows.Add(row);
}

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Если он связан с источником данных, сначала нужно получить источник данных,

// Assuming it's a DataTable
DataTable dt = ((DataTable)myDataGridView.DataSource);  

вставьте строки в ваш источник данных (например, что ваш метод делает в вашем посте), а затем попросите представление обновить его содержимое.

Так, может быть, что-то вроде этого будет работать:

public void gridStart()
{
    DataTable dt = new DataTable();
    DataColumn colContactID = new DataColumn("Date", typeof(string));
    DataColumn colContactName = new DataColumn("Caller", typeof(string));
    DataColumn colResult = new DataColumn("Result", typeof(string));
    dt.Columns.Add(colContactID);
    dt.Columns.Add(colContactName);
    dt.Columns.Add(colResult);
    dataGridView1.DataSource = dt;
    // Call method to insert values.
}

, чтобы запустить сетку, и:

public void gridInsert(string i, string b, string c)
{
    DataTable dt = (DataTable)myDataGridView.DataSource; 
    DataRow row = dt.NewRow();
    row["Date"] = i;
    row["Caller"] = b;
    row["Result"] = c;
    dt.Rows.Add(row);
    // Call another method to refresh grid view.
}

для вызова, когда вы хотите вставить данные в таблицу данных.

1 голос
/ 03 августа 2010

Вы можете использовать DataTable.NewRow () . На этой странице MSDN есть несколько примеров. Если у вас есть дополнительные вопросы, предоставьте пример кода для ответа.

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.DataSource = MyDataTable;
}

private string _fileName = "MyCache.xml";

private DataTable _myDataTable;
public DataTable MyDataTable
{
    get
    {
        if (_myDataTable == null)
        {
            _myDataTable = new DataTable();
            if (File.Exists(_fileName))
                _myDataTable.ReadXml(_fileName);
            else
                InitDataTable(_myDataTable);
        }
        return _myDataTable;
    }
}

private void InitDataTable(DataTable table)
{
    table.TableName = "MyTable";
    table.Columns.Add("Date", typeof(DateTime));
    table.Columns.Add("Caller", typeof(string));
    table.Columns.Add("Result", typeof(string));
}

// Have your add code call this method!
private void AddValue(DateTime date, string caller, string result)
{
    var row = MyDataTable.NewRow();
    row["Date"] = date;
    row["Caller"] = caller;
    row["Result"] = result;
    MyDataTable.Rows.Add(row);
}

protected override void OnClosed(EventArgs e)
{
    if (_myDataTable != null)
        _myDataTable.WriteXml(_fileName,  XmlWriteMode.WriteSchema);
    base.OnClosed(e);
}
0 голосов
/ 17 ноября 2011

Мое решение:

public partial class _Default : System.Web.UI.Page
{
    DataTable tb = new DataTable();
}

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {
        DataTable dt = new DataTable("table");
        dt.Columns.Add(new DataColumn("NR", Type.GetType("System.Int32")));
        dt.Columns.Add(new DataColumn("Dihname", Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("ing", Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Cost", Type.GetType("System.String")));
        Session["ss"] = dt;
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
         tb = (DataTable)Session["ss"];
         DataRow r1 = tb.NewRow();
         r1[0] = ViewState["dishid"].ToString();
         r1[1] = ViewState["dishname"];
         r1[3] = Label3.Text;
         tb.Rows.Add(r1);
         DataList5.DataSource = tb;
         DataList5.DataBind();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...