C# 如何针对来自DataGrid中代码隐藏或数据源的数据更改项模板中的combobox

C# 如何针对来自DataGrid中代码隐藏或数据源的数据更改项模板中的combobox,c#,.net,asp.net,visual-studio,datagrid,C#,.net,Asp.net,Visual Studio,Datagrid,我有一个数据网格,数据来自数据库,它有状态的组合框,我希望它们根据各自的值,例如,有一列状态,它有一个组合框:打开和关闭,我希望它相对于数据库表列中的值进行更改,若在数据库表列中写入了“关闭”,则组合框应选择为“关闭”,若已打开,则应选择为“打开”。请参阅所附图片。 提前感谢您的帮助。首先将数据源保存在viewstate中。如果数据源是datatable,那么就这样做 protected void gridview1_RowDataBound(object sender, GridViewRow

我有一个数据网格,数据来自数据库,它有状态的组合框,我希望它们根据各自的值,例如,有一列状态,它有一个组合框:打开和关闭,我希望它相对于数据库表列中的值进行更改,若在数据库表列中写入了“关闭”,则组合框应选择为“关闭”,若已打开,则应选择为“打开”。请参阅所附图片。
提前感谢您的帮助。

首先将数据源保存在viewstate中。如果数据源是datatable,那么就这样做

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{

        if (e.Row.RowType == DataControlRowType.DataRow)
        {

            DropDownList ddlList = (DropDownList)e.Row.FindControl("Name_of_DPList");
            int i=e.Row.RowIndex;
            DataTable dtTable = (DataTable)ViewState["dtPurchaseOrder"];
            string str = dtTable.Rows[i]["Name_Of_column"].ToString();//Name of the column in data source that stores the status.
            ddlList.items.FindByText(str).Selected=true;
        }
    }

假设您使用的是模板列,则可以执行以下操作:

<asp:TemplateColumn>
    <ItemTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Eval("DropDownValueColumn") %>' />
    </ItemTemplate>
</asp:TemplateColumn>

为什么不将dataGridView中的comboBox列设置为具有两个允许的值:“Open”和“Close”。查询SQL数据库并检索部分记录的结果(在本例中可能基于“进程键”)。然后测试返回的字符串
if(string.Compare(str1,str2,true)==0){//选择适当的comboBoxItem}
…最佳做法是使用lable或BoundField在网格视图中显示数据,而不是使用combobox或listbox。@Chirag Fanse:您在这里给出了什么建议?这不是最佳做法。显然,OP需要能够更改状态。-1您不应该在ViewState中存储数据源。如果这个数据表有很多记录,那么ViewState将是巨大的,这将使页面崩溃。这是个可怕的建议,在这种情况下根本不需要。您已经可以通过
e.Item.DataItem
访问数据。
protected void DataGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    DropDownList ddl = e.Item.FindControl("DropDownList1") as DropDownList;
    if (ddl != null)
    {
        ddl.SelectedValue = DataBinder.Eval(e.Item.DataItem, "DropDownColumnValue").ToString();
    }
}