我要问的一般问题是比较datalist中行的最佳方法是什么。我的代码是关于一个数据列表,其中包含一个文本框和两个按钮,一个提交,一个清除。当用户单击提交时,我试图将文本框与其他行进行比较。按钮单击是一个命令,我传递ItemIndex作为命令参数,所以我知道按钮单击发生在哪一行。我正在使用foreach循环遍历每一行。
以下代码是我的click事件中的foreach循环
int giftCount = 0;
foreach(DataListItem dli in dlGiftCode)
{
bool isCurrentRow = dli.ItemIndex.ToString() == e.CommandArgument.ToString() ? true:false;
int currentRow = Convert.ToInt32(e.CommandArgument);
TextBox txtCardCode = (TextBox)giftcode.FindControl("txtCardCode");
string currentCode = txtCardCode.Text;
for(int x = 0; x < dlGiftCode.Items.Count; x++)
{
if(currentCode == txtCardCode.Text && !isCurrentRow)
giftCount++;
}
if(giftCount <= 1)
{
//Continue on
}
else
{
//show message
}
}
for循环是我尝试查找重复项的失败。我可以看出为什么它不起作用,但我似乎无法在我的问题上得到正确的逻辑。我可以使用相同的datalist使它成为嵌套的foreach并再次遍历每一行吗?或者这对我想要实现的目标无效。
如果需要更多信息,我可以添加。
答案 0 :(得分:1)
你可以做的是首先抓住被点击的DataListItem
,找到它的TextBox:
LinkButton clickedButton = (LinkButton)sender;
DataListItem clickedItem = (DataListItem)clickedButton.NamingContainer;
TextBox clickedTextbox = (TextBox)clickedItem.FindControl("txtCardCode");
然后,遍历DataList的项目,将您刚刚点击的项目与其余项目进行比较:
foreach (DataListItem dli in dlGiftCode.Items)
{
if (dli != clickedItem)
{
TextBox tb = (TextBox)dli.FindControl("txtCardCode");
if (tb.Text == clickedTextbox.Text)
{
giftCount++;
}
}
}