c# - example - Valores de la columna GridView Linking
templatefield gridview c# asp net (2)
Actualiza tu método GetG1
al siguiente:
public static DataTable GetG1(int? id=null)
{
DataTable dt = new DataTable();
string strcon = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strcon))
{
conn.Open();
if(id.HasValue)
{
string strQuery = "Select * From ManLog Where Id=@id";
SqlCommand cmd = new SqlCommand(strQuery, conn);
cmd.Parameter.Add(new SqlParameter("id",id.Value);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
else
{
string strQuery = "Select * From ManLog";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
}
return dt;
}
Entonces, como ya ha publicado Joel, debe pasar una identificación al enlace de su segunda vista de cuadrícula. Por este motivo, debe actualizar el controlador de eventos Page_Load de su primer formulario web, donde reside GridView1.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int id;
if(int.TryParse(Request.QueryString["id"], out id)
{
GridView1.DataSource = DataRepository.GetG1(id);
GridView1.DataBind();
}
else
{
GridView1.DataSource = DataRepository.GetG1();
GridView1.DataBind();
}
}
}
Por último, pero no menos importante, debe actualizar los enlaces correspondientes en GridView2.
<ItemTemplate>
<asp:LinkButton ID="lblEAICode" runat="server" Text=''<%# Eval("EAI_Code") %>'' />
</ItemTemplate>
En el atributo Texto, debe colocar ''../../gridview1.aspx?id=<%# Eval("EAI_Code") %>''
, donde ../../gridview1.aspx
es la ruta relativa de la web forma en que reside gridview1.
ACTUALIZAR
<asp:LinkButton runat="server" CommandArgument=''<%# Eval("EAI_Code") %>'' OnCommand="LinkButton_Click" Text="View"> </asp:LinkButton>
agregue el siguiente controlador para el evento click de su botón de enlace en su código detrás de la clase
protected void LinkButton_Click(Object sender, CommandEventArgs e)
{
if (e.CommandArgument != null)
{
Response.Redirect("../Product%20Profit.aspx?id=" + e.CommandArgument.ToString());
}
}
Tengo dos vistas de cuadrícula en pantallas separadas.
GridView1
ID Product Date Amount
1 Car1 02/03/2014 $ 15,000
1 Car2 05/03/2014 $ 10,000
2 Bike 01/01/2014 $ 2,500
3 Bus 06/04/2014 $ 25,000
GridView2
ID Product Date Amount
1 Car2 05/03/2014 $ 25,000
2 Bike 01/01/2014 $ 2,500
3 Bus 06/04/2014 $ 25,000
Gridview2 resume valores de fila de ID similares de GridView1 y muestra en GridView2 la última Fecha de vigencia.
Ahora estoy mostrando mi columna de ID en GridView2 como LinkButton. Cuando hago clic en el valor 1 en la columna ID de GridView2, tengo que navegar a GridView1 y mostrar solo los valores de ID 1 en la grilla.
Código detrás:
GridView1
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = DataRepository.GetG1();
GridView1.DataBind();
}
}
public static DataTable GetG1()
{
DataTable dt = new DataTable();
string strcon = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strcon))
{
conn.Open();
string strQuery = "Select * from ManLog";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
return dt;
}
GridView2
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView2.DataSource = DataRepository.GetG2();
GridView2.DataBind();
}
}
public static DataTable GetG2()
{
DataTable dt = new DataTable();
string strcon = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strcon))
{
conn.Open();
string strQuery = "Select ID, Product, max(Date),sum(Amount) from ManLog";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
return dt;
}
Botón de enlace para GridView 2:
<asp:TemplateField HeaderText="ID" SortExpression="ID">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="25%" />
<EditItemTemplate>
<asp:TextBox ID="txtID" Width="100%" runat="server" Enabled="false" Text=''<%# Eval("ID") %>''></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="lblID" runat="server" Text=''<%# Eval("ID") %>'' />
</ItemTemplate>
</asp:TemplateField>
No estoy seguro de cuál es exactamente tu pregunta o cómo se presenta tu página, pero creo que debes establecer la url
en el enlace GridView2
a algo así como GridView1Page.aspx?id=1
luego usar QueryString
para cargar solo el carné de identidad. Si no usa la url
o no desea publicar, intente con una variable de Session
.
Entonces, en su método de enlace a la red tiene algo como:
if (Request.QueryString["id"] != null)
{
//load some: select * from table where id = Request.QueryString["id"]
}
else
{
//load all (select * from table)
}