![](/img/trans.png)
[英]Transfer selected rows from one GridView to another GridView in webform (ASP.NET)
[英]transfer data from gridview to another webform in asp.net using c#?
我有这样的gridview:
<asp:GridView ID="wbsdataGV1" runat="server" Width="790px" AutoGenerateColumns="False"
OnSelectedIndexChanged="wbsdataGV1_SelectionChanged">
<Columns>
<asp:TemplateField HeaderText="WBS Code">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("WBSCode") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="TextBox7" runat="server" Text='<%# Eval("Description") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Territory Code">
<ItemTemplate>
<asp:TextBox ID="TextBox8" runat="server" Text='<%# Eval("TerritoryCode") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Amount">
<ItemTemplate>
<asp:TextBox ID="TextBox9" runat="server" Text='<%# Eval("AmountReleased") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当我单击链接按钮时,我想要该数据,然后将其从..传输到另一个aspx
protected void wbsdataGV1_SelectionChanged(object sender, EventArgs e)
{
//Some code ;
}
现在我的问题是如何通过单击gridview上的链接按钮来获取数据? 我可以通过querystring或session变量或隐藏的文本字段传输数据...但是我担心的是,我如何才能获得确切的单击数据...任何帮助?
将DataKeys属性定义为数据的主键(这里我假设您有一个名为“ ID”的行标识符)。
<asp:GridView ... DataKeys="ID">
... existing markup
</asp:GridView>
在wbsdataGV1_SelectionChanged
,获取用户单击的行的ID,如下所示:
int rowID = (int)this.wbsdataGV1.SelectedDataKey.Value;
然后重定向到另一个这样的页面,只传递ID:
Response.Redirect("anotherpage.aspx?id=" + rowID);
然后在您的其他页面中:
protected void Page_Load(object s, EventArgs e)
{
if (!Page.IsPostback)
{
int rowID = int.Parse(Request.QueryString["id"]);
// do something with the ID of the row, like go and look
// up JUST that row again
}
}
奖励-使整个行都可单击,避免需要CommandButton,请执行以下操作:
<script language="javascript" type="text/javascript">
var oldColour = null;
function rowMouseover(o) {
o.style.cursor = 'pointer';
oldColour = o.style.backgroundColor;
o.style.backgroundColor = '#dddddd';
}
function rowMouseout(o) {
o.style.backgroundColor = oldColour;
}
</script>
<asp:GridView ... OnRowCreated="grid_RowCreated" />
protected void grid_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onclick"] =
Page.ClientScript.GetPostBackClientHyperlink(
this.grid,
"Select$" + e.Row.RowIndex);
e.Row.Attributes["onmouseover"] = "rowMouseover(this);";
e.Row.Attributes["onmouseout"] = "rowMouseout(this);";
}
}
protected override void Render(HtmlTextWriter writer)
{
for (int i = 0; i < grid.Rows.Count; i++)
Page.ClientScript.RegisterForEventValidation(grid.UniqueID, "Select$" + i);
base.Render(writer);
}
您可以通过Session对象传递ID,但是如果多个浏览器窗口同时执行相同的操作(取决于浏览器),则会产生奇怪的行为。 用户很难进行篡改。
您也可以通过Request.Form传递ID,这将使它对琐碎的用户摆弄隐藏,但不会增加任何真正的安全性。
提示:不要将大量对象转储到Session变量中。 它是惰性的,容易出错,并且无法扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.