C# asp.net数据网格编辑

C# asp.net数据网格编辑,c#,asp.net,datagrid,C#,Asp.net,Datagrid,我有以下asp.net DataGrid: <asp:DataGrid runat="server" ID="AutoGenerateTable" AutoGenerateColumns = "False" OnEditCommand="AutoGenerateTable_Edit" OnCancelCommand="btn_CancelEdits" OnUpdateCommand="btn_Update"> <HeaderStyle Font-Bold

我有以下asp.net DataGrid:

    <asp:DataGrid runat="server" ID="AutoGenerateTable" AutoGenerateColumns = "False" OnEditCommand="AutoGenerateTable_Edit" OnCancelCommand="btn_CancelEdits" OnUpdateCommand="btn_Update">
        <HeaderStyle Font-Bold="True" />
        <PagerStyle Mode="NumericPages" HorizontalAlign="Left" Font-Bold="true" />

        <Columns>
             <asp:BoundColumn HeaderText="Country" DataField="Country" ReadOnly="True"/>
             <asp:BoundColumn HeaderText="Partner" DataField="Partner" ReadOnly="True"/>
             <asp:BoundColumn HeaderText="Product" DataField="Product" ReadOnly="True"/>
            <asp:TemplateColumn HeaderText="Flag">
                <ItemTemplate>
                    <asp:Literal id="FlagText" runat="server" Text='<%# Eval("Flag")%>'/> 
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList runat="server" ID="FlagFropDown" >
                        <asp:ListItem Text="Auto Fulfill" Value="1" />
                        <asp:ListItem Text="Do Not Auto Fulfill" Value="0" />
                    </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateColumn>
            <asp:EditCommandColumn HeaderText="Edit" EditText="Edit" CancelText="Cancel" UpdateText="Update" />
        </Columns>
    </asp:DataGrid> 
有什么想法吗

编辑

编辑功能代码:

public void AutoGenerateTable_Edit(Object sender, DataGridCommandEventArgs e)
{
    AutoGenerateTable.EditItemIndex = e.Item.ItemIndex;
    List<string> flag = new List<string>();
        flag.Add("Auto Fulfill");
        flag.Add("Do Not Auto Fulfill");
    AutoGenerateTable.DataSource = populateTable();
    AutoGenerateTable.DataBind();
    Literal text = e.Item.Cells[3].Controls[1] as Literal;

DropDownList list = e.Item.Cells[3].Controls[1] as DropDownList;
}
public void autogeneratable_Edit(对象发送方,DataGridCommandEventArgs e)
{
AutoGenerateTable.EditItemIndex=e.Item.ItemIndex;
列表标志=新列表();
标记。添加(“自动完成”);
添加标记(“不自动履行”);
AutoGenerateTable.DataSource=populateTable();
AutoGenerateTable.DataBind();
Literal text=e.Item.Cells[3]。控件[1]为Literal;
DropDownList list=e.Item.Cells[3]。控件[1]作为DropDownList;
}

请使用下面的代码。希望对你有帮助

  protected void AutoGenerateTable_EditCommand(object source, DataGridCommandEventArgs e)
        {
            // / Set the EditItemIndex property to the index of the item clicked 
            // in the DataGrid control to enable editing for that item. Be sure
            // to rebind the DateGrid to the data source to refresh the control.
            AutoGenerateTable.EditItemIndex = e.Item.ItemIndex;
            BindGrid();
        }


    protected void AutoGenerateTable_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        Literal FlagText = null;
        if (e.Item.ItemType == ListItemType.Item)
        {
            FlagText = e.Item.FindControl("FlagText") as Literal;
        }
        if (e.Item.ItemType == ListItemType.EditItem)
        {
            DropDownList FlagFropDown = e.Item.FindControl("FlagFropDown") as DropDownList;
            if (FlagText != null)
            {
                string value = FlagText.Text.Trim();
                if (FlagFropDown != null)
                {
                    //now you have got the object of dropdown
                    //If you want to do any opertaion on dropdown can write code for it.
                    FlagFropDown.Items.FindByText(value).Selected = true;
                }
            }
        }
    } 

您的问题是试图在中查找控件的
DataGridItem
e
,您的
DataGridCommandEventArgs
的变量,是编辑前命令的参数。因此,
DataGridItem
包含编辑模式下的所有控件not。这意味着你的下拉列表将不存在

您需要做的是在绑定后获取该行的
DataGridItem
DataGridItem
将包含处于编辑模式的所有控件。您已经有了行索引,因此只需使用它获取新的
DataGridItem

public void AutoGenerateTable_Edit(Object sender, DataGridCommandEventArgs e)
{
    // Put the data grid into edit mode
    AutoGenerateTable.EditItemIndex = e.Item.ItemIndex;
    List<string> flag = new List<string>();
        flag.Add("Auto Fulfill");
        flag.Add("Do Not Auto Fulfill");
    AutoGenerateTable.DataSource = populateTable();
    AutoGenerateTable.DataBind();
    Literal text = e.Item.Cells[3].Controls[1] as Literal;

    // Get the row again now that we are in edit mode
    DataGridItem editItem = AutoGenerateTable.Items[e.Item.ItemIndex];
    DropDownList FlagFropDown = (DropDownList)editItem.FindControl("FlagFropDown");

    // ...
}
public void autogeneratable_Edit(对象发送方,DataGridCommandEventArgs e)
{
//将数据网格置于编辑模式
AutoGenerateTable.EditItemIndex=e.Item.ItemIndex;
列表标志=新列表();
标记。添加(“自动完成”);
添加标记(“不自动履行”);
AutoGenerateTable.DataSource=populateTable();
AutoGenerateTable.DataBind();
Literal text=e.Item.Cells[3]。控件[1]为Literal;
//现在处于编辑模式,请再次获取该行
DataGridItem editItem=AutoGenerateTable.Items[e.Item.ItemIndex];
DropDownList FlagFropDown=(DropDownList)editItem.FindControl(“FlagFropDown”);
// ...
}

您正在编写哪个事件的代码?@ImadoddinIbnAlauddin oneditcommand我们可以查看您的
EditCommand
事件的代码吗?@j.f.我已经发布了代码更新代码中的错误是什么?我知道我们不应该在这里说谢谢,但这真的让我很困扰,所以谢谢您我非常感谢您的帮助不客气,很高兴我能帮忙!我永远不会阻止别人有礼貌。
public void AutoGenerateTable_Edit(Object sender, DataGridCommandEventArgs e)
{
    // Put the data grid into edit mode
    AutoGenerateTable.EditItemIndex = e.Item.ItemIndex;
    List<string> flag = new List<string>();
        flag.Add("Auto Fulfill");
        flag.Add("Do Not Auto Fulfill");
    AutoGenerateTable.DataSource = populateTable();
    AutoGenerateTable.DataBind();
    Literal text = e.Item.Cells[3].Controls[1] as Literal;

    // Get the row again now that we are in edit mode
    DataGridItem editItem = AutoGenerateTable.Items[e.Item.ItemIndex];
    DropDownList FlagFropDown = (DropDownList)editItem.FindControl("FlagFropDown");

    // ...
}