Javascript 在GridView特定行的新窗口中显示数据

Javascript 在GridView特定行的新窗口中显示数据,javascript,asp.net,gridview,Javascript,Asp.net,Gridview,目前我有一个GridView,它有一个带有日期的列。此列在每个单元格中都有一个链接,用于打开窗口并显示aspx页面。我想要它做的是让链接打开一个窗口,并在新的GridView中显示该行的日期和其他信息 这是我的密码: ascx javascript(在aspx文件中)-编辑 函数showDateProfile(x){ var w1=window.open(“DateProfile.aspx?id=x”,“Profile”,“宽度=800,高度=600”); } //编辑 var qs=th

目前我有一个GridView,它有一个带有日期的列。此列在每个单元格中都有一个链接,用于打开窗口并显示aspx页面。我想要它做的是让链接打开一个窗口,并在新的GridView中显示该行的日期和其他信息

这是我的密码:

ascx


javascript(在aspx文件中)-编辑


函数showDateProfile(x){
var w1=window.open(“DateProfile.aspx?id=x”,“Profile”,“宽度=800,高度=600”);
}
//编辑
var qs=this.Request.QueryString[“x”];
我将非常感谢您的帮助,如何让它以我想要的方式工作。提前谢谢

编辑

这是在新窗口中为gridview创建数据源的好方法吗

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
SelectCommand="SELECT uid, name, company, startdate, enddate FROM Customer WHERE (startdate = @Date) or (enddate = @Date)" 
ConnectionString="<%$ ConnectionStrings:New_QuickBooksConnectionString %>">
    <SelectParameters>
    <asp:QueryStringParameter DefaultValue="" Name="Date" QueryStringField="DateFormat" Type="Object" />
    </SelectParameters>
    </asp:SqlDataSource>

首先,您需要将您的唯一标识符传递到
showDateProfile()
到第二页的pas,为此,您可能可以定义

然后您需要将id从
showDateProfile()
传递到第二页,作为
querystring
,如下所示:

函数showDateProfile(id){
var w1=window.open(“DateProfile.aspx?x=“id,”Profile”,“宽度=800,高度=600”);
}

然后在第二个page_load事件中,您可以获得唯一标识符,该标识符已被传递,如下所示:

this.Request.QueryString[“x”]

并强制转换为其类型,例如,如果您的id类型为
Guid
,则需要执行以下操作:
Guid.Parse(this.Request.QueryString[“x”])


然后,你有了id,唯一的事情就是从数据库中获取信息,并用任何东西显示它们,比如
GridView

我为你写了一个示例,它显示了所有
,点击
生日
列,用户被重定向到另一个页面, 这是主页代码首页(WebForm1.aspx):

现在,在第二页。。。 这是我的第二页代码封面(DateProfile_1.aspx)

我还有另一个页面使用
SqlDataSource
绑定数据,在这种情况下,您不需要任何服务器端代码,出于这个原因,我只发布代码前端(DateProfile_2.aspx):




最后,让我知道,如果这篇文章对你有用,你可以传递你的唯一键(id)作为
查询字符串
window.open(“DateProfile.aspx?id=1”,“Profile”,“width=800,height=600”)
并在
DateProfile
页面中,通过此
query String
对您的
DB
进行查询,获取所有需要的内容,并绑定到新的
GridView
,并将
id
传递给
showDateProfile()
我想您可以这样做,
href=“javascript:showDateProfile('%\Eval(“DateFormat”)%”)
好的,谢谢你的快速回复!我不知道如何像你说的那样绑定到gridview。我发布了一个答案,如果不清楚,请让我知道以帮助你。你可以查看我编辑的帖子吗?我根据你的答案添加了内容,但我不知道我是否做对了。change
href=“javascript:showDateProfile('%#Eval('DateFormat')%”)“
(您的标记)到
href=“javascript:showDateProfile”('%#Eval(“您的唯一索引器字段名称”)”
(我的意思)并编辑您的javascript方法(
x
必须是字符串外的,因为它是一个变量)如下
窗口。打开(“DateProfile.aspx?id=“+x”,“Profile”,“width=800,height=600”)
这一行导致javascript中的异常
var qs=this.Request.QueryString[“x”];
您应该这样做,在加载页面的
DateProfile.cs
中的
code-behind中,这不是
javascript
,因为您传递的查询字符串类似于
“DateProfile.aspx”id=“+x
您需要通过
“id”
像这样引用查询字符串
this.Request.QueryString[“id”]
这非常有帮助,谢谢!我收到了以下错误:
数据绑定:“System.Data.DataRowView”不包含名为“id”的属性。
它显示错误在这里:
您是否完全替换了我的代码?您需要进行一些自定义,您必须使用您自己的字段名,在我的项目中,我有一个字段名by
id
name,在你的项目中,你必须使用唯一的关键字段名称,如果帖子对你有用,请投票,iv它们是你的答案,将它们作为答案检查,以帮助其他人阅读帖子
<script type="text/javascript">
function showDateProfile(x) {
    var w1 = window.open("DateProfile.aspx?id=x", "Profile", "width=800,height=600");
}

// edit
var qs = this.Request.QueryString["x"];
</script>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
SelectCommand="SELECT uid, name, company, startdate, enddate FROM Customer WHERE (startdate = @Date) or (enddate = @Date)" 
ConnectionString="<%$ ConnectionStrings:New_QuickBooksConnectionString %>">
    <SelectParameters>
    <asp:QueryStringParameter DefaultValue="" Name="Date" QueryStringField="DateFormat" Type="Object" />
    </SelectParameters>
    </asp:SqlDataSource>
<script>

    function showDateProfile(x) {

        window.open("DateProfile_1.aspx?id=" + x, "Profile", "width=800,height=600");
    };

</script>

<asp:GridView ID="PersonGridView_Master" 
    runat="server" 
    AutoGenerateColumns="False" >
    <Columns>            
        <asp:TemplateField HeaderText="BirthDate">
            <ItemTemplate>
                <a href="javascript:showDateProfile('<%#Eval("id")%>')"><%# Eval("date")%></a>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="name" HeaderText="Name"/>
    </Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
    {
        BindGrid();
    }

    public void BindGrid()
    {
        // you can bind data to your grid in different ways
        // SqlDataSource, ObjectDataSource, ... , it doesn`t matter

        PersonGridView_Master.DataSource = GetPersons();
        PersonGridView_Master.DataBind();
    }

    public object GetPersons()
    {
        // you can fetch your data in different ways, it doesn`t matter

        TestEntities context = new TestEntities();
        return context.tbl_Persons
            .Select(u => new
            {
                id = u.fldID,
                name = u.fldFirstName,
                date = u.fldBirthDate
            })
            .ToList();
    }
<asp:GridView ID="PersonGridView_Detail" 
        runat="server" 
        AutoGenerateColumns="False" >
        <Columns>            
            <asp:BoundField DataField="date" HeaderText="BirthDate"/>
            <asp:BoundField DataField="name" HeaderText="Name"/>
        </Columns>
    </asp:GridView>
public partial class DateProfile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // get from query string and casting to its type
        Guid id = Guid.Parse(Request.QueryString["id"]);

        // populate grid
        BindGridToPerson(id);
    }

    public void BindGridToPerson(Guid ID)
    {
        // you can bind data to your grid in different ways
        // if you can use SqlDataSource, ObjectDataSource, you need to set property on those
        // to say that they need to get id from query string, in this way, we bind data
        // to grid manually

        PersonGridView_Detail.DataSource = GetPersonByID(ID);
        PersonGridView_Detail.DataBind();
    }

    public object GetPersonByID(Guid ID)
    {
        // you can fetch your data in different ways, it doesn`t matter

        TestEntities context = new TestEntities();
        return context.tbl_Persons
            .Select(u => new
            {
                id = u.fldID,
                name = u.fldFirstName,
                date = u.fldBirthDate
            })
            .Where(u => u.id == ID)
            .ToList();
    }
}
   <asp:GridView ID="PersonGridView_Detail" 
        runat="server" 
        AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
        <Columns>            
            <asp:BoundField DataField="date" HeaderText="BirthDate"/>
            <asp:BoundField DataField="name" HeaderText="Name"/>
        </Columns>
    </asp:GridView>

    <br />
    <asp:SqlDataSource ID="SqlDataSource1" 
        runat="server" 
        ConnectionString="<%$ ConnectionStrings:Web_TestConnectionString %>" 
        SelectCommand="SELECT [fldID], [fldBirthDate] as date, [fldFirstName] as name 
            FROM [Common].[tbl_Persons] 
            where [fldID] = @id">
        <SelectParameters>
            <asp:QueryStringParameter Name="id" QueryStringField="id" />
        </SelectParameters>
    </asp:SqlDataSource>