using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
namespace WSSC.Webhuyugouwu
{
/// <summary>
/// WebSort 的摘要说明。
/// </summary>
public class WebSort : System.Web.UI.Page
{
protected System.Web.UI.WebControls.ListBox ListBox1;
protected System.Web.UI.WebControls.Label Label1;

WSSC.Webhuyugouwu.Categories.Categories   categories=new  WSSC.Webhuyugouwu.Categories.Categories() ;
protected System.Web.UI.HtmlControls.HtmlInputHidden Dbclickflag;
protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;
protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden2;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.ListBox ListBox2;
WSSC.Webhuyugouwu.Categories.Categories1  categories1=new WSSC.Webhuyugouwu.Categories.Categories1(); 
private void Page_Load(object sender, System.EventArgs e)
{

if(!this.IsPostBack)
{
DataSet dset=categories.TotalSelectCategories("Select * from Totalcategories");
this.ListBox1.DataSource=dset;
this.ListBox1.DataTextField="Generalcategory";
this.ListBox1.DataValueField="tID";

this.ListBox1.DataBind();
ListBox2.Attributes.Add("ondblclick","javascript:document.all.Button1.click();"); 
}
if(this.IsPostBack)
{
if(this.Dbclickflag.Value=="true")
ListBox1_Dbclick();
}
}
public  void  ListBox1_Dbclick()
{
this.Label1.Text ="你选择的是:";
categories1.TID=Convert.ToInt64(this.ListBox1.SelectedItem.Value);
DataSet dset=categories.DetailedSelectCategories(categories1);
this.ListBox2.DataSource=dset;
this.ListBox2.DataTextField="commoditycategories";
this.ListBox2.DataValueField="dID";
this.ListBox2.DataBind();
this.Label1.Text +=ListBox1.SelectedItem.Text +"<<";
}

public void ListBox2_Dbclick()
{
this.Label1.Text +=this.Hidden1.Value;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
private   void   Button1_Click(object   sender,   System.EventArgs  e)   
{   

this.Label1.Text+=this.ListBox2.SelectedItem.Text;
}    }
}
页面有两个ListBox,当页面加载就把Totalcategories表的数据加载到ListBox1,点击ListBox1的项就加载就把Detailedcategories表的数据加载到ListBox2,但点击ListBOX2把选中项赋给Label1时产生以下错误
“/Webhuyugouwu”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 90:  {   
行 91: 
行 92:  this.Label1.Text+=this.ListBox2.SelectedItem.Text;
行 93:  }   
行 94: 
 源文件: c:\inetpub\wwwroot\webhuyugouwu\websort.aspx.cs    行: 92 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   WSSC.Webhuyugouwu.WebSort.Button1_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\webhuyugouwu\websort.aspx.cs:92
   System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   System.Web.UI.Page.ProcessRequestMain() 

解决方案 »

  1.   

    用一个hidden存放双击选项的value或Text值,然后才是触发Button1.click()
    ListBox2.Attributes.Add("ondblclick","javascript:document.all.hidden3.value=this.options[this.selectedIndex].value;document.all.Button1.click();"); 
    //或ListBox2.Attributes.Add("ondblclick","javascript:document.all.hidden3.value=this.options[this.selectedIndex].innerText;document.all.Button1.click();");然后, private   void   Button1_Click(object   sender,   System.EventArgs  e)   
    {   this.Label1.Text+= hidden3.Value;
    }
      

  2.   

    另外,除非lz双击ListBox2时必须提交服务器,如果不是的话,完全可以全用js实现:
    <%@ Page language="c#" Codebehind="WebForm6475183.aspx.cs" AutoEventWireup="false" Inherits="bsTest2005_8_16.CSDN.WebForm6475183" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm6475183</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language="javascript">
    function test(obj)
    {

    var tmp = obj.options[obj.selectedIndex].innerText;
    document.getElementById("Text1").value += tmp + ",";
    }

    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:ListBox id="ListBox2" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"
    Width="224px" Height="368px" ondblclick="test(this);"></asp:ListBox><INPUT id="Text1" style="Z-INDEX: 103; LEFT: 272px; WIDTH: 480px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; POSITION: absolute; TOP: 88px; HEIGHT: 22px; BORDER-BOTTOM-STYLE: none"
    readOnly type="text" size="74" name="Text1" runat="server">
    <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 512px; POSITION: absolute; TOP: 136px" runat="server"
    Text="Button"></asp:Button>
    </form>
    </body>
    </HTML>