2015-06-18 5 views
2

У меня есть сетки с изображениями GridView1 и GridView2 внутри GridView1.LinkButton не работает внутри вложенного gridview

Моя проблема заключается в том, что я хочу разместить Linkbutton в GridView2, но когда я нажимаю кнопку ссылки, я получаю эту ошибку.

Ссылка на объект не установлена ​​в экземпляр объекта.

Похоже, что не удалось найти мой GridView2.

Вот мой ASPX разметки:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="700px" Height="16px" 
    style="text-align:left; margin-top: 0px; " DataKeyNames ="progressID" OnRowDataBound="GridView1_OnRowDataBound" 
    CssClass="Grid" CellPadding="1" ForeColor="#333333" HeaderStyle-HorizontalAlign="left"> 
    <AlternatingRowStyle BackColor="White" /> 
    <Columns> 
     <asp:TemplateField HeaderText="Progress"> 
      <ItemTemplate> 
       <%# Eval("message") %> 
       <br /> 
       <asp:label ID="labelRemark" runat="server" style="font-style:italic; Font-Size:11.5px;" text='<%# Eval("remark") %>'></asp:label> 
       <br /> 
       <div id="div<%# Eval("progressID") %>"> 
        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
          DataKeyNames="progressID" GridLines="None" style="text-align:center; font-size:small;" CellPadding="1" ForeColor="#333333" Width="376px"> 
         <AlternatingRowStyle BackColor="White" /> 
         <Columns> 
          <asp:BoundField DataField="tackingNo" HeaderText="Tacking No" ItemStyle-Width="100px" ItemStyle-Font-Size="Small" > 
           <ItemStyle Font-Size="Small" Width="100px" /> 
          </asp:BoundField> 
          <asp:BoundField DataField="courierDate" HeaderText="Courier Date" ItemStyle-Width="100px"> 
           <ItemStyle Width="100px" /> 
          </asp:BoundField> 
          <asp:TemplateField HeaderText="Website"> 
           <ItemTemplate> 
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("companyurl") %>' Visible="False"></asp:Label> 
            <asp:LinkButton ID="LinkButton1" Text= '<%# Bind("providernm") %>' runat="server" 
              onclick="LinkButton1_Click">LinkButton</asp:LinkButton> 
           </ItemTemplate> 
          </asp:TemplateField>   
         </Columns> 
         <FooterStyle BackColor="#990000" ForeColor="White" Font-Bold="True" /> 
         <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
         <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> 
         <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 
         <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
         <SortedAscendingCellStyle BackColor="#FDF5AC" /> 
         <SortedAscendingHeaderStyle BackColor="#4D0000" /> 
         <SortedDescendingCellStyle BackColor="#FCF6C0" /> 
         <SortedDescendingHeaderStyle BackColor="#820000" /> 
        </asp:GridView> 
       </div> 
      </ItemTemplate>       
     </asp:TemplateField> 
     <asp:BoundField DataField="dateupdate" HeaderText="Date Update" />     
    </Columns> 
    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
    <SortedAscendingCellStyle BackColor="#FDF5AC" /> 
    <SortedAscendingHeaderStyle BackColor="#4D0000" /> 
    <SortedDescendingCellStyle BackColor="#FCF6C0" /> 
    <SortedDescendingHeaderStyle BackColor="#820000" /> 
</asp:GridView> 

Код За

public partial class Form : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string TxID = TextBox1.Text; 
     Label1.Text = "Tracking Details For Parcel No :" + TxID + " "; 

     CheckProductTrack checkProductTrack = new CheckProductTrack(); 
     int trackingID = checkProductTrack.getTrackRecord(TxID); 

     if(trackingID!=0) 
     { 
      GridView1.DataSource = ProgressTrackClass.ProgressTrack.getProgress(trackingID); 
      GridView1.DataBind(); 
     } 
     else 
     { 
      GridView1.DataSource = null; 
      GridView1.DataBind(); 

      string CS = ConfigurationManager.ConnectionStrings["TMXEntities"].ConnectionString; 
      SqlConnection con = new SqlConnection(CS); 

      SqlDataAdapter da = new SqlDataAdapter(); 
      DataSet ds = new DataSet(); 
      da.SelectCommand = new SqlCommand("SELECT tradeit.TSTxDetails.TxID, tradeit.TSTxDetails.ProductID, tradeit.TSTxDetails.ProductName, tradeit.TSTxDetails.Qty, tradeit.TSTxMaster.TxStatus " 
              + " FROM tradeit.TSTxDetails INNER JOIN tradeit.TSTxMaster ON tradeit.TSTxMaster.TxID=tradeit.TSTxDetails.TxID WHERE tradeit.TSTxDetails.TxID='" + TxID + "' ", con); 

      con.Open(); 
      da.Fill(ds); 
      GridView3.DataSource = ds; 
      GridView3.DataBind(); 

      int rowCount = GridView3.Rows.Count; 
      if (rowCount == 0) 
      { 
       GridView3.Visible = false; 
       Label2.Text = "TxId Entered is not Exist"; 
      } 
      else 
      { 
       GridView3.Visible = true; 
       Label2.Text = ""; 
      } 
      con.Close(); 
     } 
    } 

    protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      string progressID = GridView1.DataKeys[e.Row.RowIndex].Value.ToString(); 
      GridView GridView2 = (GridView)e.Row.FindControl("GridView2"); 

      int proID = Convert.ToInt32(progressID); 
      GridView2.DataSource = ProgressLogisClass.ProgressLogis.getCourierRecord(proID); 
      GridView2.DataBind(); 
     } 
    } 

    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 
     GridViewRow row = ((LinkButton)sender).Parent.Parent as GridViewRow; 
     int rind = row.RowIndex; 

     GridView gridview2 = (GridView)GridView1.FindControl("GridView2"); 
     Label ctrl = (Label)gridview2.Rows[rind].FindControl("Label1"); 

     Response.Redirect(ctrl.Text); 
    } 
} 

Я действительно не знаю, что я должен делать. Насколько я прочитал, я должен использовать команду row и так далее, но я не уверен, как найти метку внутри GridView2.

Благодаря

+0

салам .......... – Imad

+1

да ........... ..................... – user3643092

ответ

1

Я хотел бы предложить вам использовать Row_Command событие для детской сетки

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "go") 
    {  
     GridViewRow Gv2Row = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer; 
     GridView Childgrid = (GridView)(Gv2Row.Parent.Parent); 

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