2013-04-06 5 views
0

У меня есть вид сетки, в котором я хочу обновить строку, но этого не происходит. Источником данных является DataTable. Пожалуйста помоги.Строка GridView не обновляется, текст из текстового поля в gridview не поддерживается шаблон редактирования


Ниже разметки

<asp:GridView ID="GrdV" runat="server" AutoGenerateColumns="false" 
    OnRowEditing="GrdV_RowEditing" OnRowUpdating="GrdV_RowUpdating"> 

<Columns> 
    <asp:TemplateField HeaderText="Clip Description"> 
     <ItemTemplate> 
      <asp:Label ID="lblDescrptn" runat="server" Text='<%# Bind("Description") %>'> 
      </asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="descTbx" runat="server" Text='<%# Bind("Description") %>'> 
      </asp:TextBox> 
     </EditItemTemplate> 
    </asp:TemplateField> 

    <asp:CommandField ShowEditButton="True" /> 

</Columns> 

и это код позади

protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 

     // Retrieve the row being edited. 
     int index = GrdV.EditIndex; 
     GridViewRow row = GrdV.Rows[index];   
     TextBox t1 = row.FindControl("descTbx") as TextBox; 

     DataTable dt = (DataTable)Session["tmdataTable"]; 

     dt.Rows[index]["Description"] = t1.Text; //Description is a column of my DataTable 
     dt.AcceptChanges(); 
     GrdV.EditIndex = -1; 
     GrdV.DataSource = dt; 
     GrdV.DataBind(); 

    } 

отладки, я считаю, что текстовое поле проходит пустую строку t1.Text ="" даже после того, как я наполненный текстовое поле с новыми значениями. Я думаю, что ошибка в строке

TextBox t1 = row.FindControl("descTbx") as TextBox; 

код PageLoad

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      GrdV.DataSource = Session["tmdataTable"]; 
      GrdV.DataBind(); 
     } 


     DataTable Finaldt = getTable(); 

     GrdV.DataSource = Finaldt; 
     GrdV.DataBind(); 
     Session["tmdataTable"] = Finaldt; 

    } 

ответ

0

Alter ваш код немного и проверить. Изменение EditIndex в e.RowIndex

protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    GridViewRow row = GrdV.Rows[e.RowIndex]; // this line is changed  
    TextBox t1 = row.FindControl("descTbx") as TextBox; 

    DataTable dt = (DataTable)Session["tmdataTable"]; 

    dt.Rows[row.DataItemIndex]["Description"] = t1.Text; //Description is a column of my DataTable 
    dt.AcceptChanges(); 
    GrdV.EditIndex = -1; 
    GrdV.DataSource = dt; 
    GrdV.DataBind(); 
} 

Вы сделали это:

protected void Page_Load(object sender, EventArgs e) 
{  
    if(!IsPostBack) 
    { 
     GrdV.DataSource = Session["tmdataTable"]; 
     GrdV.DataBind(); 
    } 
} 
+0

Нет эффекта. Тем не менее t1.text пусто –

+0

см. Мои обновления. –

+0

по-прежнему ничего, одна и та же проблема –

0
protected void GrdV_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     if (e.Item is GridDataItem) 
     { 
     // Retrieve the row being edited. 
     int index = GrdV.EditIndex; 
     GridViewRow row = GrdV.Rows[index];   
     TextBox t1 = row.FindControl("descTbx") as TextBox; 

     DataTable dt = (DataTable)Session["tmdataTable"]; 

     dt.Rows[index]["Description"] = t1.Text; //Description is a column of my DataTable 
     dt.AcceptChanges(); 
     GrdV.EditIndex = -1; 
     GrdV.DataSource = dt; 
     GrdV.DataBind(); 
     } 
    } 
1

EditIndex не доступна, вам нужно e.RowIndex от GridViewUpdateEventArgs

// Retrieve the row being edited. 
DataTable dt = (DataTable)Session["tmdataTable"]; 
GridViewRow row = GrdV.Rows[e.RowIndex]; 
TextBox t1 = row.FindControl("descTbx") as TextBox; 

dt.Rows[row.DataItemIndex]["Description"] = t1.Text; //Description is a column of my DataTable 
dt.AcceptChanges(); 
GrdV.EditIndex = -1; 
GrdV.DataSource = dt; 
GrdV.DataBind(); 
+0

Без эффекта. все еще пустое значение передано в t1.Text. –

+0

Попробуйте изменить 'GrdV.DataSource = dt;' на 'GrdV.DataSource = Session [" tmdataTable "];' но опять же, это выглядит так, как сказал Правен – mcalex

Смежные вопросы