两种下拉列表都有变化吗?

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
我在Asp网页上有2个dropdownlist框,它们都绑定到数据库,每个都绑定到不同的表。我正在使用linq to sql从表中获取信息并在文本框中显示结果...问题是当我从下拉列表中选择一个项目时..它似乎从数据库的两个表中获取了信息...我在每个下拉列表框中都有以下代码......该代码在两个下拉框中的选定索引更改事件中

这是给客户的下拉菜单
using (DB_ClassDataContext myDB = new DB_ClassDataContext(conn))
            {
                var cust = from c in myDB.Customers
                           where c.Company_Name == DropDownList3.Text
                           select new
                           {
                               customer = c.Company_Name,
                               contact = c.Contact_Name,
                               phone = c.Bus_Phone,
                               address = c.Address
                           };


                foreach (var item in cust)
                {
                    txtContactName.Text = item.contact;
                    txtPhone.Text = item.phone;
                    txtCompanyAddress.Text = item.address;
                }
            }


这是库存商品编号的下拉列表

 using (DB_ClassDataContext Inv = new DB_ClassDataContext(conn))
            {
                var inventory = from inv in Inv.Inventories
                                where inv.ItemNumber == DropDownList2.Text
                                select new
                                {
                                    itemName = inv.ItemName,
                                    itemDesc = inv.ItemDesc,
                                    itemPrice = inv.ItemPrice
                                };


                foreach(库存中的可变项目)
                {
                    txtItemName.Text = item.itemName;
                    txtItemDesc.Text = item.itemDesc;
                    txtItemPrice.Text = item.itemPrice.ToString();
                }
            }


感谢您的任何帮助

-InkedGFX
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
当我从下拉列表中选择一项时,它似乎从数据库中的两个表中获取信息
您能阐明您的意思吗?再三考虑,也许您是说这两个事件处理程序在回发之后都被调用? ASP.NET DropDownList始终会触发SelectedIndexChanged | NS银子弹

还对此部分发表评论:
foreach(库存中的可变项目)
{
txtItemName.Text = item.itemName;
txtItemDesc.Text = item.itemDesc;
txtItemPrice.Text = item.itemPrice.ToString();
}
由于这些控件只能显示一项,因此为什么要循环播放?您可能应该将Linq表达式限制为.First或.FirstOrDefault以仅返回一项并将其仅分配给文本框。
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
好的...是的,我会尽力澄清..当我从一个下拉列表中选择一个项目时,它会获取所选项目的信息...但是如果可以说"100-101"项目下拉列表中的项目编号,则它将返回有关项目编号下拉列表的信息。这没有意义,因为该项目下拉列表的索引从未更改过……如果有任何意义!

ps我会更改代码以使用.first或.firstordefault ......谢谢您指出这一点!

-InkedGFX
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
好的..让我详细解释....

我在页面上有2个下拉列表框...一个是客户列表,另一个是库存商品列表...。

dropdownlist_Example.jpg

因此,当我从客户列表框中选择一个客户时,它将获取该客户的信息,并在文本框中填写该信息...但是发生的是,当我选择一个客户时,项目下拉列表中该项目的信息为还填写了项目文本框,这是不应该做的。...直到我从项目下拉列表中选择了一个项目...由于项目下拉索引没有变化...所以为什么要为该项目填写信息我在客户下拉列表中更改索引时的项目?

我希望这有助于更好地解释它

谢谢您的帮助

-InkedGFX
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
您是否读过我在第二篇文章中链接的文章?您是否调试了回发期间发生的情况?

由于每个更改还会查询数据库,因此您是否考虑了具有多个UpdatePanels的页面上的部分回发?
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
我已经阅读了这篇文章...尽管我很确定作者在说什么.....什么是部分回发....?

-InkedGFX
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
好的...我已经向带有下拉列表的页面添加了一个更新面板,并进行了设置。现在可以按预期工作.....所以一个问题得以解决...现在又有一个问题..在我添加更新面板之前这是一个问题,所以我不认为更新面板会导致此问题..... 。当我从客户下拉列表中选择一个项目时,一切都按预期工作...但是当我从项目编号下拉列表中选择一个项目时,什么都没有发生。.我已经调试并在下拉列表的selectedindexchanged事件中设置了一个断点... ..当我运行代码时,从未到达断点...不确定为什么会这样...当我选择一个客户时,触发了客户下拉事件....让我知道如果您需要我粘贴代码!

谢谢您到目前为止的帮助。

-InkedGFX
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
**更新**

我在选定的索引更改事件中为项目编号dropdownlist设置了另一个断点...,然后逐步通过...似乎该事件正在触发,但未设置文本框文本

这是选择索引更改事件的代码

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (DB_ClassDataContext Inv = new DB_ClassDataContext(conn))
            {
                var inventory = from inv in Inv.Inventories
                                where inv.ItemNumber == DropDownList2.Text
                                select new
                                {
                                    itemName = inv.ItemName,
                                    itemDesc = inv.ItemDesc,
                                    itemPrice = inv.ItemPrice
                                };


                foreach(库存中的可变项目)
                {
                    txtItemName.Text = item.itemName;
                    txtItemDesc.Text = item.itemDesc;
                    txtItemPrice.Text = item.itemPrice.ToString();
                }
            }
            
        }


我知道我不应该使用foreach循环从"var inventory"因为库存中只有一件商品,但我无法弄清楚如何使用.default()或.firstordefault()

当我执行此代码时,我可以看到txtItemName.Text实际上是它应该来自数据库以及其他文本字段的值...但是当下拉列表中所选索引更改时,网页不会更新...知道为什么会这样吗?

-InkedGFX
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
我知道我不应该使用foreach循环从"var inventory"因为库存中只有一件商品,但我无法弄清楚如何使用.default()或.firstordefault()
看示例代码:
可枚举
可枚举OrDefault
当我执行此代码时,我可以看到txtItemName.Text实际上是它应该来自数据库以及其他文本字段的值...但是当下拉列表中所选索引更改时,网页不会更新...知道为什么会这样吗?
现在,您在UpdatePanel中具有DDL,这些文本框是否也在同一面板中?否则,它们将不会包含在该部分页面更新中。

如果将它们放置在同一UpdatePanel中很尴尬,则可以将它们放置在具有UpdateMode = Conditional的其他UpdatePanel中,并在需要更新时为该面板调用Update方法,或者直接将DDL.SelectedIndexChanged添加到其他面板Triggers集合中。
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
当我将文本框添加到更新面板时,我丢失了下拉列表中的项目...下拉列表与数据库中的“项目”表进行数据绑定...如果我在更新面板中没有文本框,则所有项目都位于下拉列表...很奇怪!!!!!

-InkedGFX
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
另外,我不太确定如何将.first()与我拥有的东西一起使用....如果我有一个整数数组,我可以看到它是如何工作的...但是我有一个带有3个属性的对象

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (DB_ClassDataContext Inv = new DB_ClassDataContext(conn))
            {
                var inventory = from inv in Inv.Inventories
                                where inv.ItemNumber == DropDownList2.Text
                                select new
                                {
                                    itemName = inv.ItemName,
                                    itemDesc = inv.ItemDesc,
                                    itemPrice = inv.ItemPrice
                                };


                foreach(库存中的可变项目)
                {
                    txtItemName.Text = item.itemName;
                    txtItemDesc.Text = item.itemDesc;
                    txtItemPrice.Text = item.itemPrice.ToString();
                }
            }
            
        }


我如何通过.first()获取itemName,itemDesc和itemPrice?

再次感谢您的帮助!

-InkedGFX
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
好的..我想出了如何在您的帮助下使用.First()的方法.....但文本字段仍在更新中,我将它们放在与下拉列表相同的更新面板中..以下是html代码

HTML:
<div class="panel-body">                          
  <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">                             
   <ContentTemplate>                             
     <div class="col-md-4">                              
       <div class="input-group left-margin-20">                              
        <span class="input-group-addon" id="basic-addon13">Item Number :</span>                                                                       
       <asp:DropDownList ID="DropDownList2" runat="server" CssClass="form-control" Width="100px" DataSourceID="SqlDataSource3" DataTextField="ItemNumber" DataValueField="ItemNumber" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" OnTextChanged="DropDownList2_TextChanged" AutoPostBack="true">                                                                            
  </asp:DropDownList>                                       
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="SELECT [ItemNumber] FROM [Inventory]">  </asp:SqlDataSource>                               
 </div>                                
  <div class="input-group left-margin-20">                                 
  <span class="input-group-addon" id="basic-addon9">Item Desc:</span>                                  
   <asp:TextBox ID="txtItemDesc" runat="server" CssClass="form-control" Height="40px" Width="150px" TextMode="MultiLine"></asp:TextBox>                               
    </div>                                 
     <asp:Button ID="btnAddNewItem" CssClass="btn btn-default left-margin-30" runat="server" Text="Add New Item" OnClick="btnAddNewItem_Click" />                                 
    <asp:Label ID="lblWarning" runat="server" Text="Error Adding New Item!" Visible="False" BackColor="#FF9900" BorderColor="#FF9900" Font-Bold="True"></asp:Label>                         </div>                                                      
    <div class="col-md-4">                                 
     <div class="input-group left-margin-20">                                    
       <span class="input-group-addon" id="basic-addon14">Item Name :</span>                                    
       <asp:TextBox ID="txtItemName" runat="server" CssClass="form-control" Height="40px" Width="170" TextMode="SingleLine"></asp:TextBox>                                 
    </div>
     <div class="input-group left-margin-20">                                   
      <span class="input-group-addon" id="basic-addon11">Item Price :</span>                                   
      <asp:TextBox ID="txtItemPrice" runat="server" CssClass="form-control" Height="40px" Width="100px" TextMode="SingleLine"></asp:TextBox>                                   
      </div>                            
   </div>                             
    <div class="col-md-4">                               
     <div class="input-group">                                    
      <span class="input-group-addon" id="basic-addon10">Item Qty :</span>                                    
      <asp:TextBox ID="txtItemQty" runat="server" CssClass="form-control" Height="40px" Width="150" TextMode="SingleLine"></asp:TextBox>                               
    </div>                                                              
  </div>                            
 </ContentTemplate>                                    
  <Triggers>                                       
    <asp:AsyncPostBackTrigger ControlID="DropDownList2" EventName="SelectedIndexChanged" />                                   
  </Triggers>                          
 </asp:UpdatePanel>                                
</div>

这是选定的索引更改事件代码

   protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (DB_ClassDataContext Inv = new DB_ClassDataContext(conn))
            {
                var inventory = (from inv in Inv.Inventories
                                where inv.ItemNumber == DropDownList2.Text
                                select new
                                {
                                    itemName = inv.ItemName,
                                    itemDesc = inv.ItemDesc,
                                    itemPrice = inv.ItemPrice
                                }).First();




                var itemname = inventory.itemName;
                var itemdesc = inventory.itemDesc;
                var itemprice = inventory.itemPrice;


                txtItemName.Text = itemname;
                txtItemDesc.Text = itemdesc;
                txtItemPrice.Text = "$" + itemprice.ToString();
               
            }
            
        }


我已跨过此事件,似乎一切都按预期进行。.....希望您能看到为什么它不起作用....

谢谢你

-InkedGFX
 
Last edited:

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
我是个白痴....问题是"UpdateMode"在updatepanel中。我将其设置为"Always" and it needs to be "Conditional"所以现在一切正常。...谢谢您的帮助。.我在您的帮助下学到了一些新知识!

-InkedGFX
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
太奇怪了,我确定在UpdatePanel中使用DDL进行测试时我始终具有UpdateMode = Always。也许是因为您还为此添加了触发器?从UpdatePanel内部的DDL(AutoPostBack)进行定期回发应导致更新而无需添加触发器。当我在文章11中提到此问题时,它是DDL触发了与其自身不同的UpdatePanel。
 

墨GFX

知名会员
已加入
2013年2月2日
留言内容
142
编程经验
Beginner
我更改了所选索引的触发器集....不确定是否需要触发器..但是它现在可以工作了!

感谢你的帮助!

-InkedGFX
 
最佳 底部