I have configured a GridView
to fill data by an ObjectDataSource
. This ObjectDataSource
requires only one parameter which is bound to a DropDownList
. This all works well.
When i load the page, it fills the DropDownList
and whatever field is displayed in this DropDownList
is passed as a parameter to the ObjectDataSource
which further fills the GridView
.
Now, i want to enhance the functionality and have a TextBox
and Button
next to this DropDownList
. I want to give my user the option to either select a value from the DropDownList
, OR TYPE IT IN THE 开发者_开发问答TextBox
AND PRESS ENTER TO UPDATE THE GridView
.
Any idea how to do it?
I have tried dataSource.Selecting
event. but it isn't working the way i want it to be.
please help
This is a rough sample but basically what you can do is instead of creating a control parameter you can create a session parameter or something similar:
So when you click enter it will use the textbox value or when you change the dropdownlist it will use the dropdownlist's value.
You can also have radio button's giving the user the option to specify from where he want's the value.
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="true"
onselectedindexchanged="ddl_SelectedIndexChanged"></asp:DropDownList>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:Button runat="server" Text="ClickMe" ID="btnOne" OnClick="btnOne_Click"/>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server">
<SelectParameters>
<asp:SessionParameter SessionField="ObjectParameterName" />
</SelectParameters>
</asp:ObjectDataSource>
Code Behind:
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
Session["ObjectParameterName"] = ddl.SelectedValue;
ObjectDataSource1.Select();
}
protected void btnOne_Click(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
Session["ObjectParameterName"] = txt.Text;
ObjectDataSource1.Select();
}
EDIT AFTERTHOUGHT
You can also instead of assigning the parameter to a session field, just set the objectdatasource's parameter directly (Barring Exception handling).
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
ObjectDataSource1.SelectParameters.Add(new Parameter() {Name="Name",DefaultValue=ddl.SelectedValue });
}
There is the SelectParameters.Add
method which takes the ColumnName and value as a parameter to pass in the parameter value.
protected void btn_Click(object sender, EventArgs e)
{
ods.SelectParameters.Clear();
ods.SelectParameters.Add("ColumnName", SetparameterValue);
}
精彩评论