GridView链接列值
本文关键字:链接 GridView | 更新日期: 2023-09-27 17:54:02
我有两个gridview在不同的屏幕。
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汇总GridView1中类似的ID行值,并在Gridview2中显示选取最新生效日期。
现在我在GridView2中显示我的ID列为LinkButton。当我点击GridView2 ID列中的值1时,它必须导航到GridView1,并在网格中仅显示ID 1的值。
代码:
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;
}
GridView 2的Link Button:
<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>
我不确定你的问题到底是什么,或者你的页面是如何布局的,但我认为你需要将GridView2
链接中的url
设置为GridView1Page.aspx?id=1
之类的东西,然后使用QueryString
只加载给定的id。如果你不使用url
或者不想发布,那么试试Session
变量。
那么在你的网格绑定方法中你可以这样写:
if (Request.QueryString["id"] != null)
{
//load some: select * from table where id = Request.QueryString["id"]
}
else
{
//load all (select * from table)
}
将您的GetG1
方法更新为以下方法:
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;
}
然后就像Joel已经发布的那样,你应该传递一个id给你的第二个gridview的链接。因此,你应该更新GridView1所在的第一个web表单的Page_Load事件处理程序。
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();
}
}
}
最后但并非最不重要的是,你应该更新GridView2中相应的链接。
<ItemTemplate>
<asp:LinkButton ID="lblEAICode" runat="server" Text='<%# Eval("EAI_Code") %>' />
</ItemTemplate>
在Text属性你应该放置'../../gridview1.aspx?id=<%# Eval("EAI_Code") %>'
,其中../../gridview1.aspx
是gridview1所在的web表单的相对路径。
<asp:LinkButton runat="server" CommandArgument='<%# Eval("EAI_Code") %>' OnCommand="LinkButton_Click" Text="View"> </asp:LinkButton>
在类
后面的代码中为链接按钮的单击事件添加以下处理程序protected void LinkButton_Click(Object sender, CommandEventArgs e)
{
if (e.CommandArgument != null)
{
Response.Redirect("../Product%20Profit.aspx?id=" + e.CommandArgument.ToString());
}
}