Доступ к значениям DataTable невозможен (даже определенной схемы таблицы там нет) - PullRequest
0 голосов
/ 16 марта 2012

ASP.Net:

<asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:GridView>

Код сзади:

public partial class _Default : System.Web.UI.Page
{
    private DataTable dt = new DataTable("SampleTable");

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack){
           PopulateGridView();     
        }
    }
    private void PopulateGridView()
    {
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Desgnation", typeof(string));
        dt.Columns.Add("City", typeof(string));
        for (int i = 0; i < src.GetLength(0); i++)
        {
            dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]);
        }
        sampleGridView.DataSource = dt;
        sampleGridView.DataBind();

    }
    protected void sampleGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = sampleGridView.Rows[e.RowIndex];
        //Response.Write(src[1,0]+" "+ dt.Rows[0][0]);
        dt.Rows[row.DataItemIndex]["Name"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
        dt.Rows[row.DataItemIndex]["Desgnation"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
        dt.Rows[row.DataItemIndex]["City"] = ((TextBox)(row.Cells[3].Controls[0])).Text;
    }
}

System.

dt.Rows[row.DataItemIndex]["Name"] = ((TextBox)(row.Cells[1].Controls[0])).Text;

Я попробовал следующий код, комментируя приведенный выше код генерации ошибки

Response.Write(dt.Columns.Count+" "+dt.TableName);

Вывод:
0 SampleTable

Почему нельзя получить доступ к датируемым значениям?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Когда вы вручную заполняете участников страницы, вам нужно выполнять каждый запрос, если он требуется для сохранения между постбэками. Это часто делается с использованием состояния сеанса.

Например

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack){
           PopulateGridView();     
        }
        else
        {
           dt = (DataTable)Session["YourDatatable"]; //retrieve it from session
           sampleGridView.DataSource = dt;
           sampleGridView.DataBind();
        }
    }
    private void PopulateGridView()
    {
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Desgnation", typeof(string));
        dt.Columns.Add("City", typeof(string));
        for (int i = 0; i < src.GetLength(0); i++)
        {
            dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]);
        }
        sampleGridView.DataSource = dt;
        sampleGridView.DataBind();

        Session["YourDatatable"] = dt; //Store it for later

    }
0 голосов
/ 17 марта 2012

Я думаю, вы должны попробовать добавить строку в таблицу следующим образом:

  for (int i = 0; i < src.GetLength(0); i++)
    {
        DataRow dr = dt.NewRow();
        dr[0] = src[i, 0];
        dr[1] = src[i, 1]; 
        dr[2] = src[i, 2];
        dt.Rows.Add(dr);
    }
    sampleGridView.DataSource = dt;
    sampleGridView.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...