1

好的,所以我目前正在使用以下代码来实现我的搜索:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:connectionstringexample %>" 
     SelectCommand="SELECT [ID], [SPECIALIST], [CUST_LNAME], [CUST_FNAME], [COMPANY_NAME], [EVENT_TYPE] FROM [tblcontacts] WHERE (([CUST_FNAME] = @CUST_FNAME) OR ([CUST_LNAME] = @CUST_LNAME) OR ([COMPANY_NAME] = @COMPANY_NAME) OR ([EVENT_TYPE] = @EVENT_TYPE))">
        <SelectParameters>
            <asp:ControlParameter ControlID="searchtext" Name="CUST_FNAME" 
                PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="searchtext" Name="CUST_LNAME" 
                PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="searchtext" Name="COMPANY_NAME" 
                PropertyName="Text" Type="String" />
            <asp:ControlParameter ControlID="searchtext" Name="EVENT_TYPE" 
                PropertyName="Text" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

<asp:GridView ID="recordsgrid" runat="server" AllowSorting="True" 
        AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
    Width="916px" BackColor="White" BorderColor="#999999" BorderStyle="None" 
            BorderWidth="1px" CellPadding="3" GridLines="Vertical" 
        DataKeyNames="ID" >
        <AlternatingRowStyle BackColor="#DCDCDC" />
        <Columns>
            <asp:CommandField ShowSelectButton="True" />

            <asp:BoundField DataField="ID" HeaderText="ID" 
                SortExpression="ID" InsertVisible="False" ReadOnly="True" />
            <asp:BoundField DataField="SPECIALIST" HeaderText="Event Specialist" 
                SortExpression="SPECIALIST" />
            <asp:BoundField DataField="CUST_LNAME" HeaderText="Client's Last Name" 
                SortExpression="CUST_LNAME" />
            <asp:BoundField DataField="CUST_FNAME" HeaderText="Client's First Name" 
                SortExpression="CUST_FNAME" />
            <asp:BoundField DataField="COMPANY_NAME" HeaderText="Company Name" 
                SortExpression="COMPANY_NAME" />
            <asp:BoundField DataField="EVENT_TYPE" HeaderText="Event Type" 
                SortExpression="EVENT_TYPE" />

        </Columns>
        <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
        <HeaderStyle BackColor="#4b6c9e" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <RowStyle ForeColor="Black" BackColor="#EEEEEE" />
        <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#0000A9" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#000065" />
    </asp:GridView> 

我想要的是能够单击 ID 列中的 ID 并打开一个新页面,该页面自动填充与该唯一 ID 相关的表单数据。我正在使用 asp.net 和 C#。任何帮助将不胜感激。

编辑:

<asp:HyperLinkField DataTextField="ID" DataNavigateUrlFormatString="Searchresults.aspx?@ID={0}" Text="ID" DataNavigateUrlFields="ID" HeaderText="ID" 
                SortExpression="ID" InsertVisible="False"  />
4

2 回答 2

1

创建一个超链接列,该列链接到传递包含该行 ID 的查询参数的页面。超链接列允许您指定 url 格式字符串,然后在该字符串中使用来自数据源的数据。一旦您使用正确的 ID 在另一个页面上,我相信您可以使用正确的数据填充该表单。

于 2012-05-01T13:32:43.440 回答
1

您可以将 ID 列设为 itemtemplate:

  <asp:TemplateField>
      <ItemTemplate>
      <asp:LinkButton ID="lb1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "id") %>' CommandName="detail" commandArgument="<%$ Eval("id")%> />
</ItemTemplate>
</asp:TemplateField>

然后在 gridview 的点击事件中,您可以访问已点击的 ID,并且可以将该 ID 传递给您必须加载相关数据的任何方法。

protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
 {
    if (e.CommandName ="detail")
     {
  int index = Convert.ToInt32(e.CommandArgument);
  List<Something> test = SomeMethod(index);
    }
 }

编辑:正如一些人已经建议的那样,您也可以使用带有导航的超链接。

于 2012-05-01T13:40:30.667 回答