根据特定的行值(Type),我必须在EditTemplateField中使用TextBox或DropDownlist(只有其中一个)。 如何绑定EditItemTemplate中的有条件控件,以告诉UpdateMethod哪个控件要考虑字段“Value”?
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="LabelType" runat="server" Text='<%# Eval("Type") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="LabelType" runat="server" Text='<%# Eval("Type") %>'></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<ItemTemplate>
<asp:Label ID="LabelValue" runat="server" Text='<%# Eval("Value") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<div style="text-align:center">
<asp:TextBox ID="TextBoxValue" runat="server" Text='<%# Bind("Value") %>'></asp:TextBox>
<asp:DropDownList ID="DropDownListValue" runat="server" SelectedValue='<%# Bind("Value") %>'>
</asp:DropDownList>
</div>
</EditItemTemplate>
</asp:TemplateField>
GridView的UpdateMethod将“Value”作为输入参数,它必须能够决定是从DropDownListValue还是TextBoxValue中获取它。
<asp:ObjectDataSource ID="ODSResults" runat="server"
SelectMethod="GetDataByIdDevice"
TypeName="DataSetSWCTableAdapters.DispositivoParametro_TableAdapter"
UpdateMethod="Save">
<SelectParameters>
<asp:QueryStringParameter Name="IdDevice" QueryStringField="id" Type="Int32" />
<asp:ProfileParameter Name="Culture" PropertyName="Cultura" Type="String" />
<asp:Parameter Name="ParameterCode" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="IdDevice" Type="Int32" />
<asp:Parameter Name="IdParameter" Type="Int32" />
<asp:Parameter Name="Value" Type="Int64" />
</UpdateParameters>
</asp:ObjectDataSource>
我试图隐藏/显示控件TextBoxValue和DropDownListValue(使用属性“Visible”)但它不起作用:UI很好但是UpdateMethod总是接收0作为输入值(我猜是因为空字符串转换)。
答案 0 :(得分:1)
简单使用Gridview RowDatabound Event
可以解决您的问题...请参阅下面的代码......
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if( e.Row.RowState==DataControlRowState.Edit)
{
DropDownList drpctrl =(DropDownList)e.Row.Cells[CellIndex].FindControl("DropDownListValue");
TextBox txtCntrl=(TextBox )e.Row.Cells[CellIndex].FindControl("TextBoxValue");
if(YuorCondition)
{
drpctrl.Visible=true/false;
txtCntrl.Visible=true/false;
ODSResults.UpdateMethod = "Save";
ODSResults.InputParameters.Clear();
ODSResults.InputParameters.Add("IdDevice", "Value1");
ODSResults.InputParameters.Add("IdParameter", "Value2");
ODSResults.InputParameters.Add("Value", dropdownValue/Textbox Value);
}
}
}
}
答案 1 :(得分:0)
试试这个
标记
<asp:TextBox ID="TextBoxValue" runat="server"
Text='<%# Bind("Value") %>'
Visible='<%# ShouldTextBoxBeVisible(Bind("Type")) %>'>
</asp:TextBox>
<asp:DropDownList ID="DropDownListValue" runat="server"
SelectedValue='<%# Bind("Value") %>'
Visible='<%# ShouldDropDownBeVisible(Bind("Type")) %>'>
</asp:DropDownList>
代码隐藏
protected bool ShouldTextBoxBeVisible(object objType)
{
return (objType != null && objType.ToString() == "TextBoxVisibleType");
}
protected bool ShouldDropDownBeVisible(object objType)
{
return (objType != null && objType.ToString() == "DropDownVisibleType");
}