改成这样试试
foreach(DataGridItem dgi in MyDataGrid1.Items)
{
CheckBox ChKremove = (CheckBox) dgi.FindControl("Remove");
if (remove != null)
{
try
{
if (remove.Checked == true) //此行选定了删除,则需要修改数据库
{
Label1.Text = remove.Text; DoSomething();
}
else
Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
} }
}
foreach(DataGridItem dgi in MyDataGrid1.Items)
{
CheckBox ChKremove = (CheckBox) dgi.FindControl("Remove");
if (remove != null)
{
try
{
if (remove.Checked == true) //此行选定了删除,则需要修改数据库
{
Label1.Text = remove.Text; DoSomething();
}
else
Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
} }
}
foreach(DataGridItem dgi in MyDataGrid1.Items)
{
CheckBox remove1 = (CheckBox) dgi.FindControl("Remove");
if (remove != null)
{
try
{
if (remove1.Checked == true) //此行选定了删除,则需要修改数据库
{
Label1.Text = remove1.Text; DoSomething();
}
else
Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
} }
}
那就把这换一下
foreach(DataList dgi in MyList.Items)
http://dotnet.aspx.cc/ShowDetail.aspx?id=FF130C7F-3650-4DA6-8943-8AA4AF3E3459
private void Button1_Click(object sender, System.EventArgs e)
{
string sMainProjectID;
string sTsbh;
string sSubProjectName;
string sSubProID;
string sSpecialty;
string sSpecialtyID;
DateTime now = DateTime.Now;
//信息数据结构表
//vCommandType, string vbsbh,string vdxgcbh,string vzymcid,string vzymc,string vzyryid,
//string vzyrymc,string vzgcbh,string vRegeditMan ,string vRegeditDate
DataTable oDataTable = new DataTable("SelectInfor");
DataColumnCollection columns = oDataTable.Columns;
columns.Add("CommandType",typeof(System.String));
columns.Add("bsbh",typeof(System.String));
columns.Add("dxgcbh",typeof(System.String));
columns.Add("zymcid",typeof(System.String));
columns.Add("zymc",typeof(System.String));
columns.Add("zyryid",typeof(System.String));
columns.Add("zyrymc",typeof(System.String));
columns.Add("zgcbh",typeof(System.String));
columns.Add("RegeditMan",typeof(System.String));
columns.Add("RegeditDate",typeof(System.String));
columns.Add("ImprotanceLevel",typeof(System.String));
DataRow UserInfoRow = Customer.Tables[CustomerData.CUSTOMERS_TABLE].Rows[0];
string vSubCensor =UserInfoRow[CustomerData.LOGOID_FIELD].ToString();
string vSubCensorName = UserInfoRow[CustomerData.NAME_FIELD].ToString();
//循环读出选中的数据
foreach( DataListItem oDataListItem in DataList1.Items)
{
string[] oArrayLsit = new string[11];
//注意数组越界的情况
sTsbh = ((Label)oDataListItem.FindControl("tsbh")).Text;
sSubProjectName = ((Label)oDataListItem.FindControl("gcmc")).Text;
sSubProID = ((Label)oDataListItem.FindControl("dxgcbh")).Text;
sMainProjectID = zgxbh.Value; DataGrid oDataGrid = (DataGrid)oDataListItem.FindControl("projectinfo");
foreach(DataGridItem oDataGridItem in oDataGrid.Items )
{
CheckBox oCheckBox =(CheckBox)oDataGridItem.FindControl("mycheck");
DropDownList oDropDownList = (DropDownList)oDataGridItem.FindControl("mydropdownlist");
if(oCheckBox.Checked)
{
sSpecialtyID= ((Label)oDataGridItem.FindControl("zymcidColum")).Text;
sSpecialty = ((Label)oDataGridItem.FindControl("zymyColumn")).Text;
string sCareerArr = oDropDownList.SelectedValue.ToString();
string ImprotancLevel = ((DropDownList)oDataGridItem.FindControl("ImprotanceLevel")).SelectedValue.ToString();
/*表的结构
* columns.Add("CommandType",typeof(System.String));
columns.Add("bsbh",typeof(System.String));
columns.Add("dxgcbh",typeof(System.String));
columns.Add("zymcid",typeof(System.String));
columns.Add("zymc",typeof(System.String));
columns.Add("zyryid",typeof(System.String));
columns.Add("zyrymc",typeof(System.String));
columns.Add("zgcbh",typeof(System.String));
columns.Add("RegeditMan",typeof(System.String));
columns.Add("RegeditDate",typeof(System.String));
* */
string[] my= new string[2];
my = sCareerArr.Split('|');
oArrayLsit[0] = "add";
oArrayLsit[1] = sTsbh;
oArrayLsit[2] = sSubProID;
oArrayLsit[3] = sSpecialtyID;
oArrayLsit[4] = sSpecialty;
oArrayLsit[5] = my[0];
oArrayLsit[6] = my[1];
oArrayLsit[7] = sMainProjectID;
oArrayLsit[8] = vSubCensorName;
oArrayLsit[9] = now.ToString();
oArrayLsit[10] = ImprotancLevel;
oDataTable.Rows.Add(oArrayLsit);
}
}
}
bool SucceOrFalse = (new FAssignPro()).SaveInforAssinRY(oDataTable);
if(SucceOrFalse)
{
Response.Write("<script>alert('分配成功')</script>");
Response.Write("<script>window.open('addzyry.aspx','MainFrameSetContents');</script>");
} else
{
Response.Write("<script>alert('分配失败\\n原因\\n可能该单项工程已分配\\n可能该项目的状态信息找不到\\n可能数据库发生错误\\n有问题请联系管理员!\\t\\t\\t')</script>");
Button1.Attributes.Add("onclick","return confrimDelete()");
}
}
我在一个页面中使用下面写法可以实现void UpdateReadingCartDatabase() //更新ReadingCart数据库
{
ReadingCartDB cart = new ReadingCartDB(); // 获取当前用户读者卡ID
string CartId = cart.GetReadingCartId(); int ReaderId=0;
if(User.Identity.Name != null && Regex.IsMatch(User.Identity.Name, @"^\d+$"))//判断是否为数字,否则转换出错
{
ReaderId = Int32.Parse(User.Identity.Name);//获得ReaderId,这里可能不是数字
}
else//如果还没有登陆,转向登陆,但是登陆后回不来了,造成下面的语句没有执行,结果出现重复添加的情况
{
Response.Redirect("Login.aspx");
}
// 遍历所有行
for (int i=0; i < MyList.Items.Count; i++)
{
Label lbBookId = (Label) MyList.Items[i].FindControl("BookId");//遍历BookId bool ifonshelf = cart.IfOnShelf(Int32.Parse(lbBookId.Text),ReaderId);//判断是否有重复书 if(ifonshelf)//发现重复书
{
MyErrorBook.Text += lbBookId.Text +"、"; //重复书ID // 获取相关行的控件
CheckBox remove = (CheckBox) MyList.Items[i].FindControl("Remove");//在第i行找到ID为Remove的控件 remove.Checked = true;
} }
if(MyErrorBook.Text.Length > 0)
{
MyErrorBook.Text = MyErrorBook.Text.Remove(MyErrorBook.Text.Length-1,1);
MyErrorBook.Text +=" 号书已经在你的书架中了!重复书籍将从读书卡中删除";
}
for (int i=0; i < MyList.Items.Count; i++) //删除所有标记要删除的行
{
// 获取相关行的控件
CheckBox remove = (CheckBox) MyList.Items[i].FindControl("Remove");//在第i行找到ID为Remove的控件
try
{
if (remove.Checked == true) //此行选定了删除,则需要修改数据库
{
Label lblBookId = (Label) MyList.Items[i].FindControl("BookId");//在第i行找到ID为BookId的控件 cart.RemoveItem(CartId, Int32.Parse(lblBookId.Text));//删除这个卡中的对应此BookId的书
}
}
catch(Exception ex)
{
MyError.Text = ex.Message;
}
}
//return true;//
} private void CheckoutBtn_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
//更新ReadingCart数据库
UpdateReadingCartDatabase();
ReadingCartDB cart = new ReadingCartDB(); // 获得Reading cart ID
string CartId = cart.GetReadingCartId(); // 卡不空,转移到checkout页面
if (cart.GetItemCount(CartId) !=0)
{
Response.Redirect("Checkout.aspx");
}
else
{
MyError.Text = "您的读书卡中没有任何信息!";
}
}
}
==================================
例外一个页面,我依葫芦画瓢,就不行了...
正是因为你的grid里又没被钩选的项目,所以循环执行一遍以后lable总是那句话
呵呵
CheckBox remove = (CheckBox) MyList.Items[i].Cells[x].FindControl("Remove");
//x是Remove在MyList第几列
CheckBox remove = (CheckBox) MyList.Items[i].Cells[x].Controls[0].FindControl("Remove");
//x是Remove在MyList第几列,如果按你图片上的就是2--Cells[2]
总结:代码如下,放在一个按钮事件中处理问题就是 shelf.RemoveItem(192,60);//删除这个书架中的对应此BookId的书 这行代码死活不执行,不管我选了没选CheckBoxvoid UpdateShelfListDatabase() //更新ShelfList数据库
{
ShelfsDB shelf = new ShelfsDB(); for (int i=0; i < MyList.Items.Count; i++) //删除所有标记要删除的行
{
// 获取相关行的控件
//CheckBox remove = (CheckBox) MyList.Items[i].FindControl("Remove");//在第i行找到ID为Remove的控件CheckBox remove = (CheckBox) MyList.Items[i].Cells[5].Controls[0].FindControl("Remove"); try
{
if (remove.Checked == true) //此行选定了删除,则需要修改数据库
{
Label lblShelfId = (Label)MyList.Items[i].FindControl("ShelfId");//在第i行找到ID为ShelfId的控件 shelf.RemoveItem(192,60);//删除这个书架中的对应此BookId的书
}
//else
//Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
}
}
}
void UpdateShelfListDatabase() //更新ShelfList数据库
{
ShelfsDB shelf = new ShelfsDB(); for (int i=0; i < MyList.Items.Count; i++) //删除所有标记要删除的行
{
// 获取相关行的控件
CheckBox remove = (CheckBox) MyList.Items[i].FindControl("Remove");//在第i行找到ID为Remove的控件 try
{
if (remove.Checked == true) //此行选定了删除,则需要修改数据库
{
Label lblShelfId = (Label)MyList.Items[i].FindControl("ShelfId");//在第i行找到ID为ShelfId的控件 shelf.RemoveItem(Int32.Parse(lblShelfId.Text),Int32.Parse(MyList.Items[i].Cells[3].Text));//删除这个书架中的对应此BookId的书
}
//else
//Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
}
}
}
{
CheckBox Chk_wc_test = (CheckBox) itemtest.FindControl("Remove_wc");
try
{
if (Chk_wc_test.Checked == true) //此行选定了删除,则需要修改数据库
{
Label1.Text = remove.Text;
DoSomething();
}
else
Label1.Text="你没有选定任何要删除的书";
}
catch(Exception ex)
{
MyError.Text = ex.Message;
} }
if (remove.Checked != true) //这行改成!= 之后可以DoSomething();也就是说remove根本就没有被选定,我选定的根本不认。