[英]How to retain the dropdown value inside gridview after footer button click
我在Gridview外部有一個Dropdown1,其中包含三個選項Select,A,B。
在gridview中,有兩個下拉菜單Dropdown2,Dropdown3,其中Dropdown2包含三個選項,例如Select,C,D。
基於Dropdown1和Dropdown2,我使用Dropdown2中javascript中的onchange事件填充Dropdown3。
第一行一切正常,但是當我添加新行時,Dropdown3值消失為默認的“選擇”
Javascript功能
function DataformatFetch(Selection) {
var status = Selection.options[Selection.selectedIndex].value;
var row = Selection.parentNode.parentNode;
var rowIndex = row.rowIndex - 1;
if (document.getElementById("<%=DropDown1.ClientID%>").value == "A") {
var Dataformatlist = row.cells[7].getElementsByTagName('SELECT')[0];
switch (status) {
case "Select":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select","Select");
break;
case "C":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select","Select");
Dataformatlist.options[1] = new Option("1","1");
Dataformatlist.options[2] = new Option("2","2");
Dataformatlist.options[3] = new Option("3","3");
break;
case "D":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select","Select");
Dataformatlist.options[1] = new Option("11","11");
Dataformatlist.options[2] = new Option("22","22");
Dataformatlist.options[3] = new Option("33","33");
break;
}
}
else if (document.getElementById("<%=DropDown1.ClientID%>").value == "B") {
var Dataformatlist = row.cells[7].getElementsByTagName('SELECT')[0];
switch (status) {
case "Select":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select");
break;
case "C":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select","Select");
Dataformatlist.options[1] = new Option("111","111");
Dataformatlist.options[2] = new Option("222","222");
Dataformatlist.options[3] = new Option("333","333");
break;
case "D":
Dataformatlist.options.length = 0;
Dataformatlist.options[0] = new Option("Select","Select");
Dataformatlist.options[1] = new Option("1111","1111");
Dataformatlist.options[2] = new Option("2222","2222");
Dataformatlist.options[3] = new Option("3333","3333");
break;
}
}
}
ASPX代碼
<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Object Type">
<ItemTemplate>
<asp:DropDownList ID="Dropdownlist2" runat="server" OnChange="DataformatFetch(this);">
<asp:ListItem Value="Select">Select</asp:ListItem>
<asp:ListItem Value="C">C</asp:ListItem>
<asp:ListItem Value="D">D</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
C#代碼
private void AddNewRowToGrid()
{
try
{
if (ViewState["CurrentTable"] != null)
{
System.Data.DataTable dtCurrentTable = (System.Data.DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
drCurrentRow = dtCurrentTable.NewRow();
//drCurrentRow["REQUESTNO"] = dtCurrentTable.Rows.Count + 1;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
for (int i = 0; i < dtCurrentTable.Rows.Count - 1; i++)
{
TextBox box2 = (TextBox)DataExchangeGridView.Rows[i].Cells[0].FindControl("PTNTextBox");
TextBox box3 = (TextBox)DataExchangeGridView.Rows[i].Cells[1].FindControl("PTDTextBox");
TextBox box4 = (TextBox)DataExchangeGridView.Rows[i].Cells[2].FindControl("PTRTextBox");
DropDownList box5 = (DropDownList)DataExchangeGridView.Rows[i].Cells[3].FindControl("PIPRDropdownlist");
DropDownList box6 = (DropDownList)DataExchangeGridView.Rows[i].Cells[4].FindControl("SupplierNameDroplist");
DropDownList box7 = (DropDownList)DataExchangeGridView.Rows[i].Cells[5].FindControl("ObjectTypeDropdownlist");
DropDownList box8 = (DropDownList)DataExchangeGridView.Rows[i].Cells[6].FindControl("DataformatDropdownlist");
dtCurrentTable.Rows[i]["PARTNUMBER"] = box2.Text;
dtCurrentTable.Rows[i]["PARTDESCRIPTION"] = box3.Text;
dtCurrentTable.Rows[i]["PARTREVISION"] = box4.Text;
dtCurrentTable.Rows[i]["PARTIPR"] = box5.Text;
dtCurrentTable.Rows[i]["SUPPLIERNAME"] = box6.Text;
dtCurrentTable.Rows[i]["OBJECTTYPE"] = box7.Text;
dtCurrentTable.Rows[i]["DATAFORMAT"] = box8.Text;
}
DataExchangeGridView.DataSource = dtCurrentTable;
DataExchangeGridView.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
SetPreviousData();
}
catch (Exception rt)
{
rt.ToString();
}
}
private void SetPreviousData()
{
try
{
int rowIndex = 0;
if (this.DataExTypeDropDownList.SelectedItem.Value == "Import")
{
if (ViewState["CurrentTable"] != null)
{
System.Data.DataTable dt = (System.Data.DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
System.Web.UI.WebControls.TextBox box2 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[0].FindControl("PTNTextBox");
System.Web.UI.WebControls.TextBox box3 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[1].FindControl("PTDTextBox");
System.Web.UI.WebControls.TextBox box4 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[2].FindControl("PTRTextBox");
box2.Enabled = box3.Enabled = box4.Enabled = false;
box2.Text = string.Empty;
box3.Text = string.Empty;
box4.Text = string.Empty;
System.Web.UI.WebControls.DropDownList box5 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[3].FindControl("PIPRDropdownlist");
System.Web.UI.WebControls.DropDownList box6 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[4].FindControl("SupplierNameDroplist");
System.Web.UI.WebControls.DropDownList box7 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[5].FindControl("ObjectTypeDropdownlist");
System.Web.UI.WebControls.DropDownList box8 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[6].FindControl("DataformatDropdownlist");
//FillDropDownList(box8);
if (i < dt.Rows.Count - 1)
{
box2.Text = dt.Rows[i]["PARTNUMBER"].ToString();
box3.Text = dt.Rows[i]["PARTDESCRIPTION"].ToString();
box4.Text = dt.Rows[i]["PARTREVISION"].ToString();
box5.Text = dt.Rows[i]["PARTIPR"].ToString();
box6.Text = dt.Rows[i]["SUPPLIERNAME"].ToString();
box7.Text = dt.Rows[i]["OBJECTTYPE"].ToString();
//box8.Text = dt.Rows[i]["DATAFORMAT"].ToString();
string XE = box8.Items.FindByText(dt.Rows[i]["DATAFORMAT"].ToString()).Value;
box8.Text = XE;
}
rowIndex++;
}
}
}
}
else if (this.DataExTypeDropDownList.SelectedItem.Value == "Export")
{
if (ViewState["CurrentTable"] != null)
{
System.Data.DataTable dt = (System.Data.DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
System.Web.UI.WebControls.TextBox box2 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[0].FindControl("PTNTextBox");
System.Web.UI.WebControls.TextBox box3 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[1].FindControl("PTDTextBox");
System.Web.UI.WebControls.TextBox box4 = (System.Web.UI.WebControls.TextBox)DataExchangeGridView.Rows[rowIndex].Cells[2].FindControl("PTRTextBox");
System.Web.UI.WebControls.DropDownList box5 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[3].FindControl("PIPRDropdownlist");
System.Web.UI.WebControls.DropDownList box6 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[4].FindControl("SupplierNameDroplist");
System.Web.UI.WebControls.DropDownList box7 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[5].FindControl("ObjectTypeDropdownlist");
System.Web.UI.WebControls.DropDownList box8 = (System.Web.UI.WebControls.DropDownList)DataExchangeGridView.Rows[rowIndex].Cells[6].FindControl("DataformatDropdownlist");
if (i < dt.Rows.Count - 1)
{
box2.Text = dt.Rows[i]["PARTNUMBER"].ToString();
box3.Text = dt.Rows[i]["PARTDESCRIPTION"].ToString();
box4.Text = dt.Rows[i]["PARTREVISION"].ToString();
box5.Text = dt.Rows[i]["PARTIPR"].ToString();
box6.Text = dt.Rows[i]["SUPPLIERNAME"].ToString();
box7.Text = dt.Rows[i]["OBJECTTYPE"].ToString();
box8.Text = dt.Rows[i]["DATAFORMAT"].ToString();
}
rowIndex++;
}
}
}
}
}
catch (Exception er)
{
er.ToString();
}
}
首先,數據格式不會回傳,因為它是在客戶端生成的,因此我們可以添加一個隱藏字段來保存該值。
<asp:HiddenField ID="selectedValue" runat="server" Value='<%# Eval("Dataformat") %>' />
我們如何填充該字段是在數據格式下拉列表中添加OnChange。
<asp:DropDownList ID="Dropdownlist7" runat="server" OnChange="DataformatSelect(this);">
function DataformatSelect(Selection) {
var selectedValue = Selection.options[Selection.selectedIndex].value;
Selection.parentNode.getElementsByTagName('INPUT')[0].value = selectedValue;
}
在服務器端,我們必須在回發(以及初始加載)時返回所有數據。
private DataTable GetEmptyTable()
{
var table = new DataTable();
table.Columns.Add("ObjectType", typeof(string));
table.Columns.Add("Dataformat", typeof(string));
return table;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var table = GetEmptyTable();
table.Rows.Add("Select", "Select");
GridView1.DataSource = table;
GridView1.DataBind();
}
}
protected void btnAddRow_Click(object sender, EventArgs e)
{
var table = GetEmptyTable();
DataRow dr;
foreach (GridViewRow gvr in GridView1.Rows)
{
dr = table.NewRow();
DropDownList ddlObjectType = gvr.FindControl("Dropdownlist2") as DropDownList;
HiddenField hdnDataFormat = gvr.FindControl("selectedValue") as HiddenField;
dr[0] = ddlObjectType.SelectedValue;
dr[1] = hdnDataFormat.Value;
table.Rows.Add(dr);
}
table.Rows.Add("Select", "Select");
GridView1.DataSource = table;
GridView1.DataBind();
}
確保使用綁定來填充對象類型。
<asp:DropDownList ID="Dropdownlist2" runat="server" OnChange="DataformatFetch(this);" SelectedValue='<%# Bind("ObjectType") %>'>
最后,在頁面加載時,我們需要同步客戶端生成的下拉列表。
<body onload="pageLoad();">
function pageLoad() {
[].forEach.call(document.getElementsByTagName('tr'), function (row, index) {
if (index == 0) {
return;
}
DataformatFetch(row.cells[0].getElementsByTagName('select')[0]);
var selectedValue = row.getElementsByTagName('input')[0].value;
row.cells[1].getElementsByTagName('select')[0].value = selectedValue;
});
}
希望這可以填補您已經擁有的所有缺失的空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.