【问题标题】:ASP.NET : Get data from selected gridview item - linq-to-entities data sourceASP.NET:从选定的 gridview 项获取数据 - linq-to-entities 数据源
【发布时间】:2012-01-24 19:43:37
【问题描述】:

我有一个带有 c# 代码隐藏的 asp.net 页面。当gridview上的选定索引更改时,我有一个在c#中触发的事件......这个gridview绑定到一个entites-data-source,我需要找到一种方法来告诉我的代码隐藏对象的id它在调用 selected_index_changed() 方法时被选中。关于如何最好地做到这一点的任何想法?

当前事件处理程序代码:

protected void VehiclesGridView_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ChangeAttemptedId && !IsSavedId)
            {
                Alert.Show("Dispatch assignment saved... (But you forgot to click Confirm or Cancel!)");
            }
            IsSavedId = false;
            ChangeAttemptedId = true;
            int selectedIndex = VehiclesGridView.SelectedIndex + 1;
            getNextRide(selectedIndex); //TODO: FIX 
        }

ASP.NET 代码:

<asp:EntityDataSource ID="VehiclesEDS" runat="server" EnableDelete="True" 
        EnableFlattening="False" EnableInsert="True" EnableUpdate="True" 
        EntitySetName="Vehicles" ContextTypeName="RamRideOps.RamRideOpsEntities" >
    </asp:EntityDataSource>

<asp:UpdatePanel ID="SelectCarUP" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:GridView ID="VehiclesGridView" runat="server" AllowPaging="True" 
                AllowSorting="True" DataSourceID="VehiclesEDS" AutoGenerateColumns="False" 
                onselectedindexchanged="VehiclesGridView_SelectedIndexChanged" 
                BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
                CellPadding="3" GridLines="Vertical" ShowHeaderWhenEmpty="True" AutoPostBack="True">
                <AlternatingRowStyle BackColor="#DCDCDC" />
                <Columns>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:LinkButton ID="GVSelectButton" runat="server" CausesValidation="False" 
                                CommandName="Select" Text="Select"></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="CarNum" HeaderText="Car" ReadOnly="True" 
                        SortExpression="CarNum" />
                    <asp:BoundField DataField="CurrPassengers" HeaderText="Passengers" 
                        ReadOnly="True" SortExpression="CurrPassengers" />
                    <asp:BoundField DataField="MaxPassengers" HeaderText="Capacity" ReadOnly="True" 
                        SortExpression="MaxPassengers" />
                    <asp:BoundField DataField="Status" HeaderText="Status" ReadOnly="True" 
                        SortExpression="Status" />
                    <asp:BoundField DataField="StartAdd" HeaderText="Pick-Up Address" 
                        ReadOnly="True" SortExpression="StartAdd" />
                    <asp:BoundField DataField="EndAdd" HeaderText="Drop-Off Address" 
                        ReadOnly="True" SortExpression="EndAdd" />
                    <asp:BoundField DataField="AvgRideTime" HeaderText="Avg. Ride Time" 
                        ReadOnly="True" SortExpression="AvgRideTime" />
                </Columns>
                <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                <HeaderStyle BackColor="#004812" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                <SelectedRowStyle BackColor="#C6940D" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#F1F1F1" />
                <SortedAscendingHeaderStyle BackColor="#C6940D" />
                <SortedDescendingCellStyle BackColor="#CAC9C9" />
                <SortedDescendingHeaderStyle BackColor="#9F770B" />
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>

将 EventArgs e 更改为 GridViewSelectEventArgs 时出错:

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0123: No overload for 'VehiclesGridView_SelectedIndexChanged' matches delegate 'System.EventHandler'

Source Error:


Line 90:     <asp:UpdatePanel ID="SelectCarUP" runat="server" UpdateMode="Conditional">
Line 91:         <ContentTemplate>
Line 92:             <asp:GridView ID="VehiclesGridView" runat="server" AllowPaging="True" 
Line 93:                 AllowSorting="True" DataSourceID="VehiclesEDS" AutoGenerateColumns="False" 
Line 94:                 onselectedindexchanged="VehiclesGridView_SelectedIndexChanged" 

【问题讨论】:

  • 我最近不得不这样做,我刚刚将新索引应用于 GridView 数据绑定到的集合。
  • 如果我理解正确,这可以工作,如果我为所选对象添加一个“referenceIndex”字段到数据库中,然后根据所选索引从 aspx 页面中绑定它..do你知道用什么代码来做这个绑定吗?
  • 我希望传递给事件处理程序的 eventargs 对象具有表示新索引的属性。不需要更改数据库。您可以发布现有方法处理程序的代码吗?
  • 当然,在上面发布。也许我仍然有点不清楚您所说的“将新索引应用于集合”是什么意思。

标签: c# asp.net gridview linq-to-entities selectedindexchanged


【解决方案1】:

如果您要传递给 getNextRide 的参数确实与选定的索引相同,那么我会制作这样的事件处理程序

    protected void VehiclesGridView_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
    {
        if (ChangeAttemptedId && !IsSavedId)
        {
            Alert.Show("Dispatch assignment saved... (But you forgot to click Confirm or Cancel!)");
        }
        IsSavedId = false;
        ChangeAttemptedId = true;

        int selectedIndex = e.NewSelectedIndex;
        getNextRide(selectedIndex); //TODO: FIX             
    }

此外,在您的事件处理程序中,您可以访问网格视图的各个成员,如下所示:VehiclesGridView.Rows[e.NewSelectedIndex].Cells[i] 其中i 是您的单元格的索引。

另外,你能把你设置VehiclesGridView的数据源的那行贴出来,这样我就可以想出一个更清晰的答案

【讨论】:

  • 好的,我想我开始有所收获了,但是当我尝试使用 GridViewSelectEventArgs 而不是 EventArgs 时,它给了我一个编译错误(上面发布),而且它也不允许我转换.我在上面发布了更多代码。另外,我是否正确理解“VehiclesGridView.Rows[e.NewSelectedIndex].Cells[i]”将允许我访问与所选特定行关联的“carNumber”?这是我需要的价值。感谢您的帮助(:
  • 如果您的 carNumber 显示在您的网格视图中,那么它应该显示。
  • @SHeinema 好吧,你是对的,GridViewSelectEventArgs 用于不同的事件处理程序,(OnSelectedIndexChanging) 你应该仍然可以使用VehiclesGridView.SelectedRow.Cells[i]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
相关资源
最近更新 更多