<asp:dropdownlist id="MusicTypes" runat="server"></asp:dropdownlist>
绑定数据源的程序是:
string aql = "select * from SM_SingerTypes";
OperDB op = new OperDB();
DataTable dt = new DataTable();
dt = op.Populate(aql);
SingerTypes.DataSource = dt.DefaultView;
SingerTypes.DataValueField = "ID";
SingerTypes.DataTextField = "TypesName";
SingerTypes.DataBind();
还有:<asp:radiobuttonlist id="IsCommend" runat="server" RepeatDirection="Horizontal" Width="104px" Height="24px">
<asp:ListItem Value="0" Selected="True">否</asp:ListItem>
<asp:ListItem Value="1">是</asp:ListItem>
</asp:radiobuttonlist>
现在从数据库读出一个数据行:
string aql = "select SM_MusicInfo.* ,SM_SpecialMusic.SpecialName ,SM_SpecialMusic.ID as sid from SM_SpecialMusic,SM_MusicInfo where SM_SpecialMusic.ID = SM_MusicInfo.SpecialID and SM_MusicInfo.ID = "+ID;
OperDB op = new OperDB();
DataTable dt = new DataTable();
dt = op.Populate(aql);
然后我想把这个数据行中的相关的信息设置成dropdownlist和RadioButtonList被选择的项,我是这样做的 :
MusicTypes.SelectedItem.Value = dt.Rows[0]["sid"].ToString();
IsCommend.SelectedItem.Value = dt.Rows[0]["IsCommend"].ToString();
但是这样完全没有作用,我应该怎么做才可以达到目的?
绑定数据源的程序是:
string aql = "select * from SM_SingerTypes";
OperDB op = new OperDB();
DataTable dt = new DataTable();
dt = op.Populate(aql);
SingerTypes.DataSource = dt.DefaultView;
SingerTypes.DataValueField = "ID";
SingerTypes.DataTextField = "TypesName";
SingerTypes.DataBind();
还有:<asp:radiobuttonlist id="IsCommend" runat="server" RepeatDirection="Horizontal" Width="104px" Height="24px">
<asp:ListItem Value="0" Selected="True">否</asp:ListItem>
<asp:ListItem Value="1">是</asp:ListItem>
</asp:radiobuttonlist>
现在从数据库读出一个数据行:
string aql = "select SM_MusicInfo.* ,SM_SpecialMusic.SpecialName ,SM_SpecialMusic.ID as sid from SM_SpecialMusic,SM_MusicInfo where SM_SpecialMusic.ID = SM_MusicInfo.SpecialID and SM_MusicInfo.ID = "+ID;
OperDB op = new OperDB();
DataTable dt = new DataTable();
dt = op.Populate(aql);
然后我想把这个数据行中的相关的信息设置成dropdownlist和RadioButtonList被选择的项,我是这样做的 :
MusicTypes.SelectedItem.Value = dt.Rows[0]["sid"].ToString();
IsCommend.SelectedItem.Value = dt.Rows[0]["IsCommend"].ToString();
但是这样完全没有作用,我应该怎么做才可以达到目的?
我按照你写的做了
抛出下面的错误:
异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: 44源错误: 行 85: MusicTypes.SelectedValue = dt.Rows[0]["sid"].ToString();
行 86: IsCommend.SelectedValue = dt.Rows[0]["IsCommend"].ToString();
SingerTypes.DataTextField = "TypesName";
取得id字段,所以你设置selectedvalue也要用DT.ROWS[0]["ID"].TOSTRING()
IsCommend.SelectedItem.Text = dt.Rows[0]["IsCommend"].ToString();
其次你看直接add(new listitem(dt.Rows[0]["sid"].ToString();,dt.Rows[0]["sid"].ToString();));这样可以么?
异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: 44源错误: 行 85: MusicTypes.SelectedValue = dt.Rows[0]["sid"].ToString();
行 86: IsCommend.SelectedValue = dt.Rows[0]["IsCommend"].ToString();
___________________________以上为引用___________________________________
出现此情况,错误在于 MusicTypes 中的 DataValueField 字段中不包含 dt.Rows[0]["sid"].ToString(); 读取出来的值形象一点就是 MusicTypes 绑定后,假如下列两个项目
<asp:ListItem Value="12">流行音乐</asp:ListItem>
<asp:ListItem Value="15">古典音乐</asp:ListItem>而你取出来的值 dt.Rows[0]["sid"].ToString() 为 "25"
那么
MusicTypes.SelectedValue = dt.Rows[0]["sid"].ToString();
就会引发 ArgumentOutOfRangeException 错误
因为它不能设置并选中 MusicTypes 中不存在此 Value 所对应的项以上解释,能明白吗?
MusicTypes.SelectedValue = dt.Rows[0]["sid"].ToString();
//如是 1.0 版本的话,可用以下语句(v1.1 也支持)this.MusicTypes.Items.FindByText("流行音乐").Selected=true;
或
this.MusicTypes.Items.FindByValue("12").Selected=true;以上也要注意 this.MusicTypes.Items.FindByValue("12") 为 null 的话也会报错保险起见,换成 ListItem it = this.MusicTypes.Items.FindByValue("12");
if(it!=null)
{
it.Selected = true;
}
{
if(this.IsCommend.Items[i].Value == dt.Rows[0]["sid"].ToString())
{
this.IsCommend.Items[i].Selected;
}
}
正解