[英]Dropdownlist in Gridview value
我動態地將值添加到dropDownlist中,該值是Gridview中的列之一。
問題在於,當添加新行?時,下拉列表中選擇的值不會保存或維護。 知道我做錯了什么。 這是我的代碼..
這是我的Gridview
<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" OnDataBound="GridView1_DataBound">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:boundfield datafield="ID" headertext="categoryid" />
<asp:boundfield datafield="univirsity" headertext="category name" />
<asp:templatefield headertext="products">
<itemtemplate>
<asp:dropdownlist id="dropdownlist1" runat="server">
</asp:dropdownlist>
</itemtemplate>
</asp:templatefield>
</Columns>
</asp:GridView>
這是單擊按鈕時將數據動態綁定到Gridview的代碼。
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
dt.Columns.Add("univirsity", System.Type.GetType("System.Int32"));
dt.Columns.Add("major", System.Type.GetType("System.Int32"));
Session["MyDataTable"] = dt;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DataTable t = (DataTable)Session["MyDataTable"];
DataRow row1 = t.NewRow();
row1["ID"] = t.Rows.Count + 1;
row1["univirsity"] = 3;
// row1["major"] = 31;
t.Rows.Add(row1);
Session["MyDataTable"] = t;
GridView1.DataSource = t;
GridView1.DataBind();
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
//addControl();
ArrayList list = new ArrayList();
list.Add("DMG");
list.Add("SVC");
foreach (GridViewRow row in GridView1.Rows)
{
// int key = (int)GridView1.DataKeys[row.RowIndex].Value;
if (row.RowType == DataControlRowType.DataRow)
{
DropDownList dl = (DropDownList)row.FindControl("dropdownlist1");
string sel = dl.SelectedValue;
if (!String.IsNullOrEmpty(sel))
{
dl.DataSource = list;
dl.DataBind();
dl.SelectedValue = sel;
}
else
{
dl.DataSource = list;
dl.DataBind();
}
}
}
}
您並不是在做任何“錯誤”的事情,只是在期待錯誤的事情。 模板控件(例如gridviews)以這種方式起作用。 如果要保留模板中控件的選定值,則必須自己執行。
我建議不要在Session中存儲大量數據,但我假設您知道這一點,並且您的方案不打算擴展到數以百萬計的用戶,每個用戶在該數據表中都有幾行。
對於您的情況,我將在該數據表中添加另一列以存儲“產品”值; 與每個回發進行同步,並在重新綁定時確保從表值設置dropdownlist值:-
protected override void OnLoad(EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("univirsity", typeof(int));
dt.Columns.Add("major", typeof(int));
// our new column
dt.Columns.Add("selectedProduct", typeof(string));
Session["MyDataTable"] = dt;
}
else
{
// on each postback, loop through the grid and update
// the datatable
// get our table AsEnumerable, so we can use LINQ expressions on it
var table = ((DataTable)Session["MyDataTable"]).AsEnumerable();
foreach (GridViewRow gridRow in GridView1.Rows)
{
// get this row's ID from the grid
int id = Convert.ToInt32(gridRow.Cells[0].Text);
// and get the matching datarow from the table
var tableRow = table.Where(x => (int)x["ID"] == id)
.SingleOrDefault();
if (tableRow != null)
{
var ddl = (DropDownList)gridRow.FindControl("dropdownlist1");
tableRow["selectedProduct"] = ddl.SelectedValue;
}
}
}
base.OnLoad(e);
}
void button1_Click(object sender, EventArgs e)
{
DataTable t = (DataTable)Session["MyDataTable"];
DataRow row1 = t.NewRow();
row1["ID"] = t.Rows.Count + 1;
row1["univirsity"] = 3;
// set default value for new column
row1["selectedProduct"] = "DMG";
t.Rows.Add(row1);
Session["MyDataTable"] = t;
GridView1.DataSource = t;
GridView1.DataBind();
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
ArrayList list = new ArrayList();
list.Add("DMG");
list.Add("SVC");
// get our table again
var table = ((DataTable)Session["MyDataTable"]).AsEnumerable();
foreach (GridViewRow gridRow in GridView1.Rows)
{
if (gridRow.RowType == DataControlRowType.DataRow)
{
// get our id and tablerow again
int id = Convert.ToInt32(gridRow.Cells[0].Text);
var tableRow = table.Where(x => (int)x["ID"] == id)
.SingleOrDefault();
// bind the list
DropDownList dl = (DropDownList)gridRow.FindControl("dropdownlist1");
dl.DataSource = list;
dl.DataBind();
// set value from tablerow.selectedProduct
dl.SelectedValue = (string)tableRow["selectedProduct"];
}
}
}
當您在gridview中有新行時,是否嘗試使用循環重新加載該下拉列表?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.