2012-04-12 17 views
0

我新的ASP.NET工作,我在我的应用程序进行搜索框。的ListView选择指数没有在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> 
+0

你绑定你的控制? – 2012-04-12 04:47:19

+0

yes,'lvwItems.DataSource = result; lvwItems.DataBind();'它正常工作,只是我想要选择行的索引。我该如何? – Krunal 2012-04-12 04:53:10

+0

添加选择按钮查看列表查看 – Raghuveer 2012-04-12 04:57:03

回答

1

你必须在ItemTemplate添加一个选择按钮,看到完整的工作代码。

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

感谢

迪普

+0

,而不是添加''我尝试使用''它现在正在工作。 thanx的帮助。 – Krunal 2012-04-12 05:43:47

+0

'' – Krunal 2012-04-12 05:44:53

+0

如果我想获得所选按钮的文本,我应该如何得到...这是我最后一个问题..(答这个,我会接受你的答案) – Krunal 2012-04-12 05:45:42

0

也许你将不得不添加事件为所选指标的变化:

<asp:ListView ID="lvwItems" runat="server" ItemPlaceholderID="plhItems" OnSelectedIndexChanging="lvwItems_SelectedIndexChanging"> 
+0

这种方法没有被调用.. – Krunal 2012-04-12 04:52:14

+0

对不起,我的意思是onselectedindexchanged..Anyways是数据显示了吗? – 2012-04-12 04:54:38

+0

yes data is showing .. – Krunal 2012-04-12 04:59:19

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

感谢

迪普

+0

'if(String.IsNullOrEmpty(l.Text))'这是什么,怎么调用这个方法? – Krunal 2012-04-12 05:01:40

+0

更新代码片段 – 2012-04-12 05:04:20

+0

数据传入正常,但'lvwItems_SelectedIndexChanging'没有在aspx.cs文件中被触发 – Krunal 2012-04-12 05:12:02

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

希望这有助于

感谢

迪普