Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过更改DropDownList中的值从GridView检索值_C#_Asp.net_Gridview_Drop Down Menu - Fatal编程技术网

C# 通过更改DropDownList中的值从GridView检索值

C# 通过更改DropDownList中的值从GridView检索值,c#,asp.net,gridview,drop-down-menu,C#,Asp.net,Gridview,Drop Down Menu,通过更改行中DropDownList的状态检索当前行时遇到问题。我的GridView代码是: <asp:GridView ID="grdMappingList" runat="server" OnPageIndexChanging="grdMappingList_PageIndexChanging" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" ShowHeaderWhenEmpty="true" UseAcc

通过更改行中DropDownList的状态检索当前行时遇到问题。我的GridView代码是:

<asp:GridView ID="grdMappingList" runat="server" OnPageIndexChanging="grdMappingList_PageIndexChanging"  AutoGenerateColumns="false" AllowPaging="true" PageSize="10"  ShowHeaderWhenEmpty="true" UseAccessibleHeader="true" CssClass="table table-hover table-striped segment_list_tbl" >
<PagerStyle CssClass="grid_pagination" HorizontalAlign="Right" VerticalAlign="Middle" BackColor="#DFDFDF" />
<Columns>
    <asp:BoundField HeaderText="Mapping Id" DataField="MAPPING_ID"></asp:BoundField>
    <asp:BoundField HeaderText="PDM Name" DataField="PDM_NAME"></asp:BoundField>   
    <asp:BoundField HeaderText="PDM EntityID" DataField="PDM_ENTITY_ID" Visible="false"></asp:BoundField>   
    <asp:TemplateField HeaderText="Mapping Status" HeaderStyle-CssClass="width_120 aligned_center" ItemStyle-CssClass="width_120 aligned_center" Visible="true">
            <ItemTemplate>
                <asp:DropDownList id="ddlMappingStatus" runat="server"  SelectedValue='<%# Bind("MappingCompleted") %>' OnSelectedIndexChanged="ddlMappingStatus_SelectedIndexChanged" AutoPostBack="true">
                    <asp:ListItem Text="Done"  Value="DONE"></asp:ListItem>
                    <asp:ListItem Text="Not Done"  Value="NOT DONE"></asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>    
    </Columns>
 </asp:GridView>
我在这行上遇到一个错误:

DropDownList ddgvOpp  (DropDownList)grdMappingList.SelectedRow.FindControl("ddlMappingStatus");
int MappingID = Convert.ToInt16(grdMappingList.SelectedRow.Cells[0].Text);
这一行:

DropDownList ddgvOpp  (DropDownList)grdMappingList.SelectedRow.FindControl("ddlMappingStatus");
int MappingID = Convert.ToInt16(grdMappingList.SelectedRow.Cells[0].Text);
似乎我无法检索这些值!我不知道为什么。当我从DropDownList中选择一个新状态时,我希望获得该行的所有值,以便更新记录


不幸的是,
SelectedRow
并不是你所认为的意思。它不仅仅是指您正在处理的当前行或当前行以及您正在使用的控件。必须以某种方式设置该属性。这通常通过GridView上的“选择”按钮完成,例如命令名为“选择”的

然而,你真的不需要这个。您只需要与您一起工作的行。由于您正在使用DropDownList的
SelectedIndexChanged
事件,因此您已经拥有了所需的内容。你只需要换一种方式

首先,获取下拉列表。然后获取DropDownList的行。现在对这一排做你想做的

但是,从您的代码来看,您甚至可能不需要该行。您只需要DropDownList的值。所以你可以一起跳过。但是,如果你真的需要这一排,下面是你将如何做到这一点

protected void ddlMappingStatus_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddlMappingStatus = (DropDownList)sender;
    if(ddlMappingStatus.SelectedItem.Text.ToUpper() == "DONE")
    {
    }

    GridViewRow row = (GridViewRow)ddlMappingStatus.NamingContainer;
}
现在,当您在GridView中使用
控件时,获取它们的值不是很干净。您必须像以前那样对列索引进行硬编码:

GridViewRow row = (GridViewRow)ddlMappingStatus.NamingContainer;
String mappingID = row.Cells[0].Text;
我倾向于使用
控件,这样我就可以使用
FindControl()
来获得我想要的东西。这可以防止列的任何重新排序破坏代码,因为您必须硬编码不同的索引。例如,要查找DropDownList(因为它已经是
),您可以执行以下操作:

DropDownList ddlMappingStatus = (DropDownList)row.FindControl("ddlMappingStatus");

当您在
ddlMappingStatus\u SlectedIndexChanged
事件中放置断点时,它是否会命中该代码。。?还有,您得到的错误是什么。。?你试过将控件包装在UpdatePanel上吗?您好,是的,它击中了代码我得到的错误是“{”对象引用未设置为对象的实例。“}”你是说用UpdatePanel包装dropdownlist吗?因为我正在用更新面板包装整个gridView,所以您的代码没有显示这一点..我只添加了gridView的代码..谢谢您解释得很好的答案。实际上,我需要该行,因为我需要BoundField=“Mapping Id”的值。如何获取该字段的特定值?我已经了解了如何获取dropdownlist的值,是的,它可以工作。但我无法得到特定字段的值。我认为您关于templateField的建议是正确的。我正在尝试获取字符串entityID=row.Cells[2].Text的值;我得到的是空字符串。我想这是因为该字段不可见?您建议我用templateField包装每个boundfield?正确,您将无法获取不可见字段的值。查看此以了解更多关于此的信息。我建议用TemplateFields替换您的BoundFields,因为我发现使用它们更容易、更干净。但最终的决定取决于你。