【问题标题】:Creating a search that you can click a link to open a form from it's unique ID创建一个搜索,您可以单击链接以从其唯一 ID 打开表单
【发布时间】:2012-05-01 13:27:11
【问题描述】:

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

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

【问题讨论】:

  • 用超链接字段替换绑定字段。使 navigateURL somepage.aspx?ID=...... 然后解析查询字符串。 - 对不起,没有时间给出正确的答案,但这应该让你开始。我现在不记得是否需要将其设为模板字段。
  • 这让我开始了,虽然我正在寻找那个选项并且我在某个地方读到你只能通过两个字段或其他东西?这是真的吗?
  • 我不确定我是否理解。您想通过 ID 搜索吗?那不是一个领域吗?
  • 我想通过允许用户在上面的 Boundfield 中输入任何数据(例如名字、姓氏等)来搜索数据库,当结果显示时,我希望允许他们单击每个结果的 ID 作为链接,这会将他们带到一个新页面,其中包含表单以及与之关联的所有数据。我不确定这有多大意义,但我会尝试您和大家提到的一些事情,然后回来提供一些见解。

标签: c# asp.net search uniqueidentifier


【解决方案1】:

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

【讨论】:

  • 我已经编辑了我的问题,以向您展示我正在使用的超链接,但是如何在我的“searchresults.aspx”上的网格视图中获取 URL 中的 ID 以加载到 ID 中页面?
  • @Kruce 我不认为你想要 url 中的“@”符号,你可能想删除它。在搜索结果页面的代码中,您可以使用Request.QueryString["ID"] 来获取传入的 ID。我假设您知道如何针对您的数据库编写查询以通过 ID 获取一行。
  • 好的,谢谢。我有一些工作,我正在使用 formview 来查看允许他们编辑的结果!感谢您的“Request.QueryString”! :)
【解决方案2】:

您可以将 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);
    }
 }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多