0

私は ASP.NET を初めて使用します。アプリケーションで検索ボックスを作成しています。

たとえば、ユーザーがテキストボックスに「abc」と入力すると、テキストボックスはデータベースから「abc」で始まるデータを取得します。このデータを に渡しますDataTable

正常に動作し、

ここに私のコードスニペットがあります:

DataTable result = new DataTable();

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    connString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConsString"].ConnectionString;
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();

    string query = string.Format("SELECT DISTINCT Scrip FROM dbo.SearchBoxData where Scrip Like '{0}%'", TextBox1.Text);

    SqlCommand cmd = new SqlCommand(query, conn);

    result.Load(cmd.ExecuteReader());

    conn.Close();

    lvwItems.DataSource = result;
    lvwItems.DataBind();
}

<div>ここで、タグ内のこのすべてのデータを取得したいと考えています。使ってみたので asp:ListView

これが私のコードスニペットです。

正常に動作しますが、ユーザーがlistViewの行を選択したときに新しいページに移動したいのですが、行を選択できません..

<asp:ListView ID="lvwItems" runat="server" ItemPlaceholderID="plhItems">
<LayoutTemplate>
    <div>
         <asp:PlaceHolder ID="plhItems" runat="server"></asp:PlaceHolder>
    </div>
</LayoutTemplate>
<ItemTemplate>
    <div>
        <%# Eval("Scrip")%>
    </div>
</ItemTemplate>

前もって感謝します !!

どんな助けでも大歓迎です。

編集:(SearchBox.aspx.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

public partial class SearchBox : System.Web.UI.Page
{
    string connString;
    DataTable result = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    { }

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        connString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConsString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connString);
        conn.Open();

        string query = string.Format("SELECT DISTINCT Scrip FROM dbo.SearchBoxData where Scrip Like '{0}%'", TextBox1.Text);

        SqlCommand cmd = new SqlCommand(query, conn);

        result.Load(cmd.ExecuteReader());

        conn.Close();

        lvwItems.DataSource = result;
        lvwItems.DataBind();
    }



    protected void lvwItems_SelectedIndexChanging(Object sender, ListViewSelectEventArgs e)
    {
        ListViewItem item = (ListViewItem)lvwItems.Items[e.NewSelectedIndex];
        Label lablId = (Label)item.FindControl("lablId");

        if (String.IsNullOrEmpty(lablId.Text))
        {
            Response.Redirect("NextPage.aspx?id=" + lablId.Text, false);
        }
    }

(SearchBox.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SearchBox.aspx.cs" Inherits="SearchBox" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    </head>
<body>

    <form id="form1" runat="server">
    <div>

    </div>
    <asp:TextBox ID="TextBox1" runat="server" Height="30px" Width="179px" 
        OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
&nbsp;&nbsp;&nbsp;<asp:Button ID="Button1" runat="server" Text="Go" 
        Width="62px" />
    &nbsp;<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>


  <asp:ListView ID="lvwItems" OnSelectedIndexChanging="lvwItems_SelectedIndexChanging" 
 runat="server" ItemPlaceholderID="plhItems">
 <LayoutTemplate>
  <div>
       <asp:PlaceHolder ID="plhItems" runat="server"></asp:PlaceHolder>
  </div>
 </LayoutTemplate>
  <ItemTemplate>
  <div>
 <%# Eval("Scrip")%>
    <asp:Label ID="lablId" visible="false" runat="server" Text='<%#Eval("Scrip") %>'/>

  </div>
</ItemTemplate>
</asp:ListView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:krunal_DBConnectionString2 %>" 
        SelectCommand="SELECT * FROM [SearchBoxData]"></asp:SqlDataSource>
    </form>
</body>
</html>
4

4 に答える 4

1

ItemTemplateにSELECTボタンを追加する必要があります。完全に機能するコードを参照してください。

  <asp:ListView ID="lvwItems" OnSelectedIndexChanging="lvwItems_SelectedIndexChanging"
    runat="server" ItemPlaceholderID="plhItems">
    <LayoutTemplate>
        <div>
            <asp:PlaceHolder ID="plhItems" runat="server"></asp:PlaceHolder>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <%# Eval("Scrip")%>
        <asp:LinkButton ID="SelectButton" runat="server" CommandName="Select" Text="Select" />
    </ItemTemplate>
  </asp:ListView>

protected void lvwItems_SelectedIndexChanging(Object sender, ListViewSelectEventArgs  e)
{
    ListViewItem item = (ListViewItem)lvwItems.Items[e.NewSelectedIndex];
    Label lablId = (Label)item.FindControl("CONTROL_ID");
}

ありがとう

ディープ

于 2012-04-12T05:35:06.807 に答える
0

どうぞ、

また、ボタンからOnClick="callMethod"を削除します。SelectedIndexメソッドがあるので、onClickメソッドは必要ありません。

protected void lvwItems_SelectedIndexChanging(Object sender, ListViewSelectEventArgs  e)
{
  ListViewItem item = (ListViewItem)lvwItems.Items[e.NewSelectedIndex];
  Button btn = (Button)item.FindControl("btn1");
  if(btn != null) 
  {
   var buttonText = btn.Text;  
  }
}

お役に立てれば

ありがとう

ディープ

于 2012-04-12T06:18:29.487 に答える
0

おそらく、Selected index change のイベントを追加する必要があります。

<asp:ListView ID="lvwItems" runat="server" ItemPlaceholderID="plhItems" OnSelectedIndexChanging="lvwItems_SelectedIndexChanging">  
于 2012-04-12T04:47:18.237 に答える
0

コード ビハインドでは、以下のように選択した行アイテムを取得できます。

また、これらのコントロールからデータを取得して次のページに渡すことができるように、ラベルまたは非表示フィールドを配置することもできます.. (ID か何かである可能性があります)。

   <asp:ListView ID="lvwItems" OnSelectedIndexChanging="lvwItems_SelectedIndexChanging" 
 runat="server" ItemPlaceholderID="plhItems">
 <LayoutTemplate>
  <div>
       <asp:PlaceHolder ID="plhItems" runat="server"></asp:PlaceHolder>
  </div>
 </LayoutTemplate>
  <ItemTemplate>
  <div>
    <%# Eval("Scrip")%>
     <asp:Label ID="lablId" visible="flase" runat="server" Text='<%#Eval("Id") %>' />
  </div>
</ItemTemplate>
</asp:ListView>

 void lvwItems_SelectedIndexChanging(Object sender, ListViewSelectEventArgs e)
 {
   ListViewItem item = (ListViewItem)lvwItems.Items[e.NewSelectedIndex];
   Label lablId = (Label)item.FindControl("lablId");

   if (String.IsNullOrEmpty(lablId.Text))
   {
     Response.Redirect("page.aspx?id="+lablId.Text,false);
   }
 }

ありがとう

ディープ

于 2012-04-12T04:55:58.650 に答える