使用C#将数据从GridView传输到ASP.NET的另一个WebForm



我有一个类似的浏览器:

 <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>

当我单击linkbutton时,我想要该数据,然后将其传输到另一个ASPX。

protected void wbsdataGV1_SelectionChanged(object sender, EventArgs e)
{
    //Some code ;
}

现在我的问题是如何通过单击GridView上的linkbutton来获取数据?我可以通过查询或会话变量或隐藏的文本字段传输数据...但是我担心的是如何获得确切的单击数据...有帮助吗?

将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
    }
}

奖励 - 要使整个行可单击,避免需要命令button,请执行此操作:

<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);
}

您可以通过会话对象传递ID,但是您可以在一个以上的浏览器窗口同时执行相同操作(取决于浏览器),从而获得奇怪的行为。用户很难篡改。

您也可以通过请求传递ID。

protip:不要仅仅将大量对象转移到会话变量中。懒惰,容易出错,不扩展。

最新更新