2012-03-20 3 views
1

Почему я не могу изменить значение в определенной строке в событии rowdatabound моего gridview? код вводится там, где значение установлено в Test, но все еще показывает старое значение?Почему значение не изменяется в rowdataound

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="au_id" DataSourceID="SqlDataSource1" 
    ondatabinding="GridView1_DataBinding" onrowdatabound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="au_id" HeaderText="au_id" ReadOnly="True" 
      SortExpression="au_id" /> 
     <asp:BoundField DataField="au_lname" HeaderText="au_lname" 
      SortExpression="au_lname" /> 
     <asp:BoundField DataField="au_fname" HeaderText="au_fname" 
      SortExpression="au_fname" /> 
    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:pubsConnectionString %>" 
    SelectCommand="SELECT [au_id], [au_lname], [au_fname] FROM [authors]"> 
</asp:SqlDataSource> 


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var row = ((DataRowView)e.Row.DataItem).Row; 

     var customerName = row.Field<String>("au_lname"); 
     if (customerName == "Carson") 
     { 
      customerName = "Test"; 
     } 
    } 
} 
+0

вы изменяете значение переменной CUSTOMERNAME не данные в строке. –

ответ

1

Потому что вы не можете изменить основной DataSource в RowDataBound (слишком поздно). Вам нужно, чтобы применить изменения к TemplateFields управления или к CellCollection в строке (в случае BoundFields или AutogenerateColumns=true):

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     var customerName = row.Field<String>("au_lname"); 
     if (customerName == "Carson") 
     { 
      e.Row.Cells[1].Text = "Test"; 
     }else 
     { 
      e.Row.Cells[1].Text = customerName; 
     } 
    } 
} 
+0

спасибо за понимание! – Rod

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