C# 字符串中存在重复值:需要有关逻辑的帮助吗
以下代码中的数据表“dtTypeId”返回2列类型名称和ID,如下所示:-C# 字符串中存在重复值:需要有关逻辑的帮助吗,c#,asp.net,telerik,C#,Asp.net,Telerik,以下代码中的数据表“dtTypeId”返回2列类型名称和ID,如下所示:- TypeId TypeName 1 Type1 2 Type2 3 Type3 问题在于,在组合框中,只有两个项目被选中,即“Type1”和“Type2”,但在Radcombobox的文本中,它显示的是文本 作为:- 类型1,类型1,类型1,类型1,类型2,类型2,类型2,类型2。 我希望组合框的文本为Type1,Type2(仅那些打了复选标记的文本)。为什么会有重复的值 下面的逻辑有
TypeId TypeName
1 Type1
2 Type2
3 Type3
问题在于,在组合框中,只有两个项目被选中,即“Type1”和“Type2”,但在Radcombobox的文本中,它显示的是文本
作为:-
类型1,类型1,类型1,类型1,类型2,类型2,类型2,类型2。
我希望组合框的文本为Type1,Type2(仅那些打了复选标记的文本)。为什么会有重复的值
下面的逻辑有什么问题?请帮忙,谢谢
foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)
{
Label lblTypeId = item1.FindControl("lblTypeId") as Label;
CheckBox chkType = item1.FindControl("chkType") as CheckBox;
Label lblTypeNames = item1.FindControl("lblTypeNames") as Label;
bllMyClass objMyClass = new bllMyClass();
objMyClass.TextID = int.Parse(lblTextID.Text);
DataTable dtTypeId = new DataTable();
dtTypeId = objMyClass.GetTypesByTextID();
if (dtTypeId.Rows.Count > 0)
{
foreach (RadComboBoxItem item2 in radComboBoxTypes.Items)
{
for (int i = 0; i < dtTypeId.Rows.Count; i++)
{
if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())
{
chkType.Checked = true;
checkedTextType += lblTypeNames.Text + ", ";
}
}
if (chkType.Checked == true)
{
checkedTextType += lblTypeNames.Text + ", ";
}
radComboBoxTypes.Text = checkedTextType;
}
}
}
foreach(radcomboxTypes.Items中的radcomboxItem1)
{
标签lblTypeId=item1.FindControl(“lblTypeId”)作为标签;
复选框chkType=item1.FindControl(“chkType”)作为复选框;
标签lblTypeNames=item1.FindControl(“lblTypeNames”)作为标签;
bllMyClass objMyClass=新bllMyClass();
objMyClass.TextID=int.Parse(lblTextID.Text);
DataTable dtTypeId=新DataTable();
dtTypeId=objMyClass.GetTypesByTextID();
如果(dtTypeId.Rows.Count>0)
{
foreach(radComboBoxTypes.Items中的RadComboxItem2)
{
for(int i=0;i
@Bolu:我遵循了你的方法,但它没有正常工作。它现在在组合框中显示的文本为type1type1,type1type1,type1type1,type2type2,type2type2,type2type2, @博鲁
这一行出现错误…checkedTextType+=checkedTextType==string.Empty?lblTypeNames.Text:“,”+lblTypeNames.Text;上面写着“意外字符”:“通过快速查看代码,我可以看到以下问题:您需要更新内部foreach循环中的标签/复选框值,或者在找到第一个匹配项时中断
foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)//for item1
{
Label lblTypeId = item1.FindControl("lblTypeId") as Label; //lblTypeId.Text=="1"
Label lblTypeNames = item1.FindControl("lblTypeNames") as Label; //lblTypeNames.Text=="Type1"
.....
foreach (RadComboBoxItem item2 in radComboBoxTypes.Items)//item1 || <item2>
{
for (int i = 0; i < dtTypeId.Rows.Count; i++)
{
if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())//true || <true>
{
chkType.Checked = true;
checkedTextType += lblTypeNames.Text + ", ";//checkedTextType=="Type1" || <checkedTextType=="Type1, Type1, Type1">
}
}
if (chkType.Checked == true)//true || true
{
checkedTextType += lblTypeNames.Text + ", "; //checkedTextType =="Type1, Type1" || <checkedTextType =="Type1, Type1, Type1, Type1">
}
}
}
//Then when out loop goes to item2, you will have "Type2, Type2, Type2, Type2" added to your checkedTextType
foreach(radcomboxTypes.Items中的radcomboxItem item1)//用于item1
{
标签lblTypeId=item1.FindControl(“lblTypeId”)作为标签;//lblTypeId.Text==“1”
标签lblTypeNames=item1.FindControl(“lblTypeNames”)作为标签;//lblTypeNames.Text==“Type1”
.....
foreach(radcomboxTypes.Items中的radcomboxItem2)//item1 | |
{
for(int i=0;i
同样,通过使用debug可以很容易地识别问题
编辑:您应该做什么:
//pseudo code
foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)
{
Label lblTypeId = item1.FindControl("lblTypeId") as Label;
CheckBox chkType = item1.FindControl("chkType") as CheckBox;
Label lblTypeNames = item1.FindControl("lblTypeNames") as Label;
bllMyClass objMyClass = new bllMyClass();
objMyClass.TextID = int.Parse(lblTextID.Text);
DataTable dtTypeId = new DataTable();
dtTypeId = objMyClass.GetTypesByTextID();
for (int i = 0; i < dtTypeId.Rows.Count; i++)
{
if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())
{
chkType.Checked = true;
checkedTextType += checkedTextType==string.Empty?lblTypeNames.Text:", " + lblTypeNames.Text ;
break;
}
}
}
radComboBoxTypes.Text = checkedTextType;
//伪代码
foreach(radComboBoxTypes.Items中的RadComboxItem1)
{
标签lblTypeId=item1.FindControl(“lblTypeId”)作为标签;
复选框chkType=item1.FindControl(“chkType”)作为复选框;
标签lblTypeNames=item1.FindControl(“lblTypeNames”)作为标签;
bllMyClass objMyClass=新bllMyClass();
objMyClass.TextID=int.Parse(lblTextID.Text);
DataTable dtTypeId=新DataTable();
dtTypeId=objMyClass.GetTypesByTextID();
for(int i=0;i
快速查看您的代码,我可以看到以下问题:您需要更新内部foreach循环中的标签/复选框值,或者在找到第一个匹配项时中断
foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)//for item1
{
Label lblTypeId = item1.FindControl("lblTypeId") as Label; //lblTypeId.Text=="1"
Label lblTypeNames = item1.FindControl("lblTypeNames") as Label; //lblTypeNames.Text=="Type1"
.....
foreach (RadComboBoxItem item2 in radComboBoxTypes.Items)//item1 || <item2>
{
for (int i = 0; i < dtTypeId.Rows.Count; i++)
{
if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())//true || <true>
{
chkType.Checked = true;
checkedTextType += lblTypeNames.Text + ", ";//checkedTextType=="Type1" || <checkedTextType=="Type1, Type1, Type1">
}
}
if (chkType.Checked == true)//true || true
{
checkedTextType += lblTypeNames.Text + ", "; //checkedTextType =="Type1, Type1" || <checkedTextType =="Type1, Type1, Type1, Type1">
}
}
}
//Then when out loop goes to item2, you will have "Type2, Type2, Type2, Type2" added to your checkedTextType
foreach(radcomboxTypes.Items中的radcomboxItem item1)//用于item1
{
标签lblTypeId=item1.FindControl(“lblTypeId”)作为标签;//lblTypeId.Text==“1”
标签lblTypeNames=item1.FindControl(“lblTypeNames”)作为标签;//lblTypeNames.Text==“Type1”
.....
foreach(radcomboxTypes.Items中的radcomboxItem2)//item1 | |
{
for(int i=0;i