gpt4 book ai didi

c# - GridView 中的下拉列表

转载 作者:行者123 更新时间:2023-11-30 17:03:50 24 4
gpt4 key购买 nike

这道题其实是两道题。我需要生成一个 gridview,其中一列是下拉选择。

我有以下代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ProjectsODS" OnRowUpdated="GridView1_RowUpdated" DataKeyNames="Id"
CssClass="mGrid"
PagerStyle-CssClass="pgr"
AlternatingRowStyle-CssClass="alt" ShowHeaderWhenEmpty="True" OnRowEditing="GridView1_RowEditing">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Project Name" />
<asp:BoundField DataField="ProjectCode" HeaderText="Code" />
<asp:TemplateField HeaderText="Access">
<ItemTemplate>
<asp:DropDownList runat="server" AutoPostBack="True">
<asp:ListItem
Enabled="True"
Text="No Access"
Value="Test" />
<asp:ListItem
Enabled="True"
Text="Read Only"
Value="Tes 2" />
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>

</Columns>
</asp:GridView>

最后一列确实是一个下拉列表。但是,目前,我正在对其中的项目进行硬编码,以查看它将如何呈现。我需要实际绑定(bind)来自另一个 ObjectDataSource 的值。但是对于网格中的每一行,它都是相同的数据。是每一行都命中ODS,还是数据读入ODS一次,每一行都使用?

如何将 ODS 链接到 DropDownLists?

那么,如何将所选值设置为行中的值?也就是说,生成gridview 的数据源有一个名为“AccessTypeId”的字段。我需要使用该值来选择 DDL 的值。我该怎么做?

然后,我将 AutoPostBack 设置为 true。一旦 DDL 获得用户设置的新值,我希望它发布该值。但是,当 DDL 选择值更改时,即使在 Grid 上也会调用什么?

最佳答案

要将您的 objectDataSource 链接到 DropDownList,您可以在标记中执行此操作:

<asp:TemplateField HeaderText="XYZ">
<ItemTemplate>
<asp:DropDownList runat="server" ID="MyDD" DataSourceId="MyDataSource" />
</ItemTemplate>
</asp:TemplateField>

如果您更喜欢动态绑定(bind)下拉列表,您可以在 RowDataBound 或什至在 RowCreated 事件中这样做,如下所示。这也回答了您的问题:

how do I get the selected value set to be a value from the row? That is, the 
data source that produces the gridview has a field called "AccessTypeId".
I need that value to be used to select the value of the DDL. How would I do that

//这里假设我们检索 CountryID 的当前行值。然后我们用这个特定 CountryID 的所有州值填充下拉列表。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
string connectionString = WebConfigurationManager.ConnectionStrings[1].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
if (e.Row.RowType == DataControlRowType.DataRow)
{
con.Open();
var ddl = (DropDownList)e.Row.FindControl("ddlState");
int CountryId = Convert.ToInt32(e.Row.Cells[0].Text);
SqlCommand cmd = new SqlCommand("select * from State where CountryID=" + CountryId, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
ddl.DataSource = ds;
ddl.DataTextField = "StateName";
ddl.DataValueField = "StateID";
ddl.DataBind();
ddl.Items.Insert(0, new ListItem("--Select--", "0"));
}
}

现在,有趣的部分来了,如何获取 DropDownlist 中的选定值以更新数据库。基本上您的问题:

I have set AutoPostBack to true. Once the DDL gets a new value set by the user, 
I want it to post the value.

您应该使用 gridView 的更新事件来传递从下拉列表中选择的新值。您需要先进入编辑模式,然后从 DropDownList 中选择新值,单击更新按钮并处理 GridView 的 RowUpdating 事件。

我正在使用的一个是我定义了我的自定义 GridView.RowUpdating 事件,如下所示。您应该使用此事件来传递新选择的 DropDownList 值。

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

DropDownList ddl= (DropDownList )GridView1.Rows[e.RowIndex].FindControl("ddlState");
string selectedvalue=ddl.selectedvalue;
//My custom code to change last moment values with that selected from DropDownList
e.NewValues.Add("State", selectedvalue);

}

您的问题:

But, what even on the Grid is called when the DDL selected value is changed

如果您已将页面的 EnableViewState 设置为 false,则每次回发都会调用 ObjectDataSource Select 方法,因此 GridView 事件也会像 OnRowDataBound 一样被调用.如果 EnableViewStatetrue,则 Select 方法将仅被调用一次,因此将调用 GridView 事件。请参阅此堆栈问题:DataBind and Postback

[我已经针对上述情况检查了 GridView 的 RowDataBound 事件]

关于c# - GridView 中的下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com