我有一個問題給大家,我如何才能使對象數據源加載數據到gridview只有當有人點擊鏈接按鈕?我將根據用戶的搜索條件,在運行時爲對象數據源中的select方法傳遞一些參數。任何人都可以爲此提出解決方案嗎?gridview使用對象數據源控件加載數據
回答
將所有參數放在HiddenField中,其中一個HDF必須是一個標誌,用於決定select方法是否必須返回查詢條目。看到這個answer。
代碼示例:
FilterGridView.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FilterGridView.aspx.cs"
Inherits="Q11876988WebApp.FilterGridView" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--
Fields for user inputs
--%>
Id:
<asp:TextBox ID="TxtId" runat="server"></asp:TextBox>
Name:
<asp:TextBox ID="TxtName" runat="server"></asp:TextBox>
Phone:
<asp:TextBox ID="TxtPhone" runat="server"></asp:TextBox>
<%--
Button to perform query
--%>
<asp:Button ID="BtnQuery" runat="server" OnClick="BtnQuery_Click" Text="Query" />
<%--
Hidden Fields used as parameters
--%>
<asp:HiddenField ID="HdfId" runat="server" />
<asp:HiddenField ID="HdfName" runat="server" />
<asp:HiddenField ID="HdfPhone" runat="server" />
<%--'false': Avoid query execution before 'BtnQuery' click.--%>
<asp:HiddenField ID="HdfDoQuery" runat="server" Value="false" />
<%--
GridView
--%>
<asp:GridView ID="GrvMyData" runat="server" AutoGenerateColumns="False" DataSourceID="OdsMyData">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" />
</Columns>
</asp:GridView>
<%--
ObjectDataSource and parameters related to Hidden Fields
--%>
<asp:ObjectDataSource ID="OdsMyData" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="QueryMyDataPoco" TypeName="Q11876988WebApp.FilterGridViewODS">
<SelectParameters>
<asp:ControlParameter ControlID="HdfId" ConvertEmptyStringToNull="False" Name="id"
PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="HdfName" ConvertEmptyStringToNull="False" Name="name"
PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="HdfPhone" ConvertEmptyStringToNull="False" Name="phone"
PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="HdfDoQuery" ConvertEmptyStringToNull="False" Name="doQuery"
PropertyName="Value" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
FilterGridView.aspx.cs:
public partial class FilterGridView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnQuery_Click(object sender, EventArgs e)
{
//change this values causes the 'OdsMyData' 'DataBind'.
this.HdfId.Value = this.TxtId.Text;
this.HdfName.Value = this.TxtName.Text;
this.HdfPhone.Value = this.TxtPhone.Text;
this.HdfDoQuery.Value = true.ToString();
}
}
FilterGridViewODS.cs:
/// <summary>
/// Class for a ObjectDataSource
/// </summary>
[DataObject]
public class FilterGridViewODS
{
private static IList<MyDataPoco> MyDataList = new List<MyDataPoco>();
/// <summary>
/// Static constructor. Creates a list of 50 items.
/// </summary>
static FilterGridViewODS()
{
for (int i = 0; i < 50; i++)
{
MyDataList.Add(
new MyDataPoco()
{
Id = i.ToString(),
Name = "Name " + i,
Phone = i + "" + i + "" + i + "." + i + "" + i + "" + i + "" + i + ""
});
}
}
/// <summary>
/// if <paramref name="doQuery"/> is <c>true</c>, performs a
/// query over the data content, Otherwise return an empty list.
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<MyDataPoco> QueryMyDataPoco(String id, String name, String phone, bool doQuery)
{
if (doQuery)
{
IEnumerable<MyDataPoco> filteredEnum =
from md in MyDataList
where
md.Id.Contains(id)
&& md.Name.Contains(name)
&& md.Phone.Contains(phone)
select md;
return filteredEnum;
}
else
{
//returning an empty list.
return new List<MyDataPoco>();
}
}
}
MyDataPoco.cs:
public class MyDataPoco
{
public String Id { get; set; }
public String Name { get; set; }
public String Phone { get; set; }
}
完整的源:Q11874496WebApp.7z
我假設你已經指定在ObjectDataSource控件的每個參數值來源。
你需要做的是搜索按鈕的點擊事件指定數據源,並明確結合電網如下:
gridView1.DataSource = objectDataSource1;
gridView1.DataBind();
嗨生鏽的嚮導,我可以分配objectdatasource控制數據集。如果有什麼可以建議我一些示例代碼 – SPL 2012-08-09 14:16:32
嘿生鏽的嚮導,有無論如何,selectmethod提到的對象數據源控件被點擊按鈕時觸發。爲什麼我問的是,我所說的按鈕是一個提交按鈕,它必須通過接受表單中的用戶輸入來激發對象數據源控件所提及的方法。 – SPL 2012-08-09 20:13:24
@SPL對於你的第一個問題,你的意思是你是否可以將一個DataSet賦值給一個ObjectDataSource控件?如果是這樣,那麼你可以。您通過創建類似於Hailton的** QueryMyDataPoco()**方法的方法來實現此目的,除了不返回** IEnumerable
- 1. 簡化對象數據源控件
- 2. 從LINQ對象的gridview數據源
- 3. 一個GridView控件,二數據源
- 4. 來自嵌套對象數據的數據源 - 不加載
- 5. 使用數據表調試gridview對象
- 6. 使用對象數據填充GridView
- 7. 加載對象數據
- 8. 使用對象數據源在GridView中進行雙向排序
- 9. GridView控件使用數據綁定
- 10. 對象數據源
- 11. 沒有使用數據源控件的gridview編輯
- 12. 使用可數據源數據源從gridview中刪除行
- 13. 追加LINQ存在數據源/ GridView控件在C#
- 14. GridView控件與數據庫
- 15. DevExpress gridView數據源
- 16. Asp.net數據源 - 查看數據源對象查看SQL數據?
- 17. ASP.Net對象數據源 - 數據綁定
- 18. 無法加載控件從空數據模板在GridView asp.net
- 19. Asp.net GridView控件在Firefox加載數據,但不能在IE7
- 20. 無法添加對象數據源
- 21. 添加數據源對象財產
- 22. ASP.net GridView - 使用數據源 - C#
- 23. 動態gridview不使用數據源
- 24. 使用對象數據的gridview click事件
- 25. 如何使用select2加載對象數據數組
- 26. 開源對象數據庫?
- 27. ASP.NET [對象數據源]
- 28. 數據源對象無效
- 29. 使用數據集作爲Repeater控件的數據源?
- 30. 創建並加載數據(對象)
嗨LC,我可以分配ObjectDataSource控件到數據集。如果有什麼可以建議我一些示例代碼 – SPL 2012-08-09 14:03:10