如何使用事件ListView1_SelectedIndexChanged从linqdatasource更新listview

时间:2014-01-12 16:28:23

标签: c# sql linq listview

我有一个linqdatasource女巫执行ListView1列表。当用户从下拉列表中选择医生姓名时,列表视图会更改。我附加了一个OnSelectedIndexChanged =“ListView1_SelectedIndexChanged”事件。 listview1的列是apointmentId,doctorName,dateApointment,clientName和一个复选框。

我想更新由复选框选中的行(基本上用户选择了他的apointment的日期)。

 <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="ApointmentDataContext" 
  EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeName="" 
  TableName="Apointment" AutoGenerateWhereClause="True">
            <WhereParameters>
               <asp:ControlParameter 
                   Name="doctorName" 
                   ControlID="DropDownList1" 
                   PropertyName="SelectedValue"
                   Type="String" />
             </WhereParameters>

 </asp:LinqDataSource>

 <div class="center">
    <asp:Label ID="lblDoctorName" runat="server" Text="Choose a doctor name"> </asp:Label>
    <div class="value-right"> 
       <asp:DropDownList ID="DropDownList1" runat="server" Width="180px" AutoPostBack="true" >
                    <asp:ListItem Text="Doctor A" Value="Doctor A" />
                    <asp:ListItem Text="Doctor B" Value="Doctor B" />
                    <asp:ListItem Text="Doctor C" Value="Doctor C" />
       </asp:DropDownList> 
    </div>  
 </div>   <br/><br/>

 <asp:ListView ID="ListView1" runat="server" DataKeyNames="apointmentId" 
    DataSourceID="LinqDataSource1" InsertItemPosition="LastItem"    
    OnSelectedIndexChanged="ListView1_SelectedIndexChanged"  >
    <AlternatingItemTemplate>
      <tr style="">
         <td>
            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
         </td>
         <!--<td>
                <asp:Label ID="ApointmentIdLabel" runat="server" Text='<%# 
                   Eval("ApointmentId") %>' />
             </td>   -->
         <td>
            <asp:Label ID="doctorName" runat="server" Text='<%# Eval("doctorName") %>' />
         </td>
         <td>
            <asp:Label ID="dateLabel" runat="server" Text='<%# Eval("dateApointment", "{0:dd-MM-
              yyyy}") %>' />
         </td>
         <td>
            <asp:Label ID="ClientLabel" runat="server" Text='<%# Eval("clientName") %>' />
         </td>
         <input id="MyCheckBox" value='<%# Eval("apointmentId") %>'
                             type="checkbox" runat="server" />

以下代码将列出所选医生的所有可用日期。目标是用户将选择可用日期(通过选中复选框)。现在我希望能够在apointement表中更新这一行。我错过了能够使用ListView1属性的代码。

protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
{
    using (ApointmentDataContext db = new ApointmentDataContext())
    {
       Listview1.
    }       
}

当我把ListView1放在这里时,我收到了错误消息当前上下文中不存在名称ListView1。

我希望能够检索guid或ApointmentId以便能够更新所选行。

我通过这样做选中了复选框。也许我们可以在这里做点什么?

protected void btnSubmit_Click(object sender, EventArgs e)
{
    int iCptCheckBox = 0;
    int indxChkBox = 0;

    foreach (ListViewDataItem item in ListView1.Items)
    {

        var chk = item.FindControl("MyCheckBox") as System.Web.UI.HtmlControls.HtmlInputCheckBox;
        if (chk != null && chk.Checked)
        {
            indxChkBox = Convert.ToInt32(chk.Value);
            iCptCheckBox++;
        }
    }
 }

感谢您的帮助,指导我解决问题。

1 个答案:

答案 0 :(得分:0)

我相信你有两个问题:

  1. 您的列表视图在后面的代码中不可见,为了解决这个问题,请清理您的页面designer.cs文件并在aspx中进行小的更改(可以添加空格),并重新生成设计器文件。这应该可以解决这个问题。
  2. 获取所选项目的第二个问题,您应该使用listview的SelectedDataKey属性来获取所选的ID。我可以看到你已经指定了数据键名称。