2014-09-04 3 views
1

Я заполняю данные в виде сетки. А также я написал код внутри Row Data Bound для изменения URL-адреса изображения на изображение.Как сохранить данные gridview при обратной передаче?

Вот код:

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 

{ 
    for (int i = 1; i < e.Row.Cells.Count; i++) 
    { 
     string cellValue = e.Row.Cells[i].Text.Trim(); 
     if(cellValue.StartsWith("http:")) 
     { 
      System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); 
      img.ImageUrl = e.Row.Cells[i].Text.Trim(); 
      HyperLink hb = new HyperLink(); 
      hb.Controls.Add(img); 
      e.Row.Cells[i].Controls.Add(hb); 
    } 
    }   
} 

Это работает отлично. На странице есть еще два элемента управления. Если я выберу один элемент управления вниз, я сделал сообщение назад. В то время изображение внутри меня уже было изменено на URL вместо Image.

Можете ли вы мне помочь?

Заранее спасибо.

Вот мой код для вопросов (я не могу размещать весь код)

ASPX код:

<html> 
<body> 

<form id="form1" runat="server"> 

<asp:DropDownList ID="DropDownList2" CssClass="borderradius" runat="server" Height="20px" Width="190px" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" Font-Size="11px"> 

</asp:DropDownList> 

<asp:Button id="sidesbmt" runat="server" onclick="sidesbmt_click"/>      
<asp:GridView ID="GridView1" runat="server" Width="100%" CssClass="mGrid" PagerStyle-CssClass="pgr" 

AlternatingRowStyle-CssClass="alt" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" 

BorderStyle="None" GridLines="Both"> 

<AlternatingRowStyle CssClass="alt"></AlternatingRowStyle> 

    </asp:GridView> 
</body> 
</html> 

Код За

protected void Page_Load(object sender, EventArgs e) 

{ 
} 
protected void sidesbmt_Click(object sender, EventArgs e) 

{ 
    GridView1.DataSource = ds; 

    GridView1.DataBind(); 
} 

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 

{ 
    for (int i = 1; i < e.Row.Cells.Count; i++) 
    { 
     string cellValue = e.Row.Cells[i].Text.Trim(); 
     if(cellValue.StartsWith("http:")) 
     { 
      System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); 
      img.ImageUrl = e.Row.Cells[i].Text.Trim(); 
      HyperLink hb = new HyperLink(); 
      hb.Controls.Add(img); 
      e.Row.Cells[i].Controls.Add(hb); 
     } 
    }   
} 
+0

Что в вашей загрузке страницы? Добавить if (! IsPostback) {...} на странице загрузки – Sam

+0

Я написал привязку данных внутри кнопки, не нажав на загрузку страницы ..... – Vanarajan

+2

Пожалуйста, разместите весь код aspx и код позади. – Priyank

ответ

3

Эта проблема возникает, когда вы добавляете управляет динамически, и этот элемент управления не существует во время события Page Init. Чтобы восстановить состояние представления в элементе управления после обратной передачи, элемент управления должен присутствовать в дереве управления.

Вы можете попробовать немного изменить свой код. Conver столбец, который отображает изображение и URL в поле Шаблон

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Literal runat="server" ID="literalUrl" Text='<%#Eval("The fieldname")%>'></asp:Literal> 
     <asp:Image runat="server" ID="imageUrl" Visible="false" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Тогда в случае RowDataBound переключать вид изображения и буквального

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    for (int i = 1; i < e.Row.Cells.Count; i++) 
    { 
     string cellValue = e.Row.Cells[i].Text.Trim(); 
     Literal literal = e.Row.Cells[i].FindControl("literalUrl") as Literal; 
     Image imageUrl = e.Row.Cells[i].FindControl("imageUrl") as Image; 
     if (literal != null && imageUrl != null) 
     { 
      if (literal.Text.StartsWith("http:")) 
      { 
       imageUrl.ImageUrl = literal.Text.Trim(); 
       imageUrl.Viisible = true; 
       literal.Visible = false; 
      } 
     } 
    } 
} 
+0

Отлично ... Большое спасибо ... Я понял. – Vanarajan