Reputation: 109
If adding the two items in my lists i can only display the first updated item from the list in the detailsview , so my problem is that if i have 10 items in the list it should display the title on all them , then when i click on each hyperlinkbutton i want it to display that information about that title from the id
here is a image link of what i want to do. https://i.sstatic.net/ZhJmc.jpg
protected void ButtonChoose_Click(object sender, EventArgs e)
{
try
{
if (DropDownListNewsFeed.SelectedItem.Value == "All")
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists>" +
"<List ID=" + web.Lists.TryGetList("Staff News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Company News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Management News").ID.ToString() + " />" +
"</Lists>";
query.ViewFields = "<FieldRef Name=\"Title\" /><FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
GridViewNewsFeed.DataSource = dv;
GridViewNewsFeed.DataBind();
}
else if(DropDownListNewsFeed.SelectedItem.Value == "Staff News")
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Staff News").ID.ToString() + " /></Lists>";
query.ViewFields = "<FieldRef Name=\"Title\" /><FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
GridViewNewsFeed.DataSource = dv;
GridViewNewsFeed.DataBind();
}
else if (DropDownListNewsFeed.SelectedItem.Value == "Management News")
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Management News").ID.ToString() + " /></Lists>";
query.ViewFields = "<FieldRef Name=\"Title\" /><FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
GridViewNewsFeed.DataSource = dv;
GridViewNewsFeed.DataBind();
}
else if (DropDownListNewsFeed.SelectedItem.Value == "Company News")
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Company News").ID.ToString() + " /></Lists>";
query.ViewFields = "<FieldRef Name=\"Title\" /><FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
GridViewNewsFeed.DataSource = dv;
GridViewNewsFeed.DataBind();
}
}
catch (Exception x)
{
LabelException.Text = x.Message;
}
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
try
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists>" +
"<List ID=" + web.Lists.TryGetList("Staff News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Company News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Management News").ID.ToString() + " />" +
"</Lists>";
query.ViewFields = "<FieldRef Name=\"Title\" />" +
"<FieldRef Name=\"Authors\" />" +
"<FieldRef Name=\"Link\" />" +
"<FieldRef Name=\"Contents\" />" +
"<FieldRef Name=\"_Category\" />" +
"<FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
//query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
DetailsViewShowNews.DataSource = dv;
DetailsViewShowNews.DataBind();
}
catch (Exception x)
{
LabelException.Text = x.Message;
}
}
This is my asp gridview code:
<asp:GridView AutoGenerateColumns="False" ID="GridViewNewsFeed" runat="server" BackColor="White"
BorderColor="#DEDFDE" BorderStyle="Solid" BorderWidth="1px" CellPadding="4"
EnableModelValidation="True" GridLines="Vertical" ForeColor="Black" >
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" OnClick="LinkButton1_Click" runat="server" Text='<%# Bind("Title") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:templatefield headertext="Date">
<itemtemplate>
<asp:label id="lblDate" runat="server" text='<%# DateTime.Parse(Eval("Date1").ToString()).ToString("d") %>' />
</itemtemplate>
</asp:templatefield>
</Columns>
</asp:GridView>
This is my asp detailsview code:
<asp:DetailsView AutoGenerateRows="False" ID="DetailsViewShowNews" runat="server"
BackColor="White" BorderColor="#336666" BorderWidth="1px"
CellPadding="4" EnableModelValidation="True" GridLines="Horizontal"
Height="226px" Width="301px" BorderStyle="Solid" >
<EditRowStyle BackColor="#339966" ForeColor="White" Font-Bold="True" />
<FooterStyle BackColor="White" ForeColor="#333333" />
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#336666" ForeColor="White"
HorizontalAlign="Center" />
<Fields>
<asp:TemplateField >
<ItemTemplate>
<asp:Label ID="Label12" runat="server" Text='<%#Eval("Title") %>' Font-Size="Large" Font-Bold="True"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBox22" runat="server" Text='<%#Eval("Contents") %>' TextMode="MultiLine" Height="100%" BorderStyle="None" ReadOnly="True" Width="250px" style="overflow:auto;"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label72" runat="server" Text='<%#Eval("_Category") %>' ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label52" runat="server" Text='<%#Eval("Authors") %>' ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label32" runat="server" Text='<%#DateTime.Parse(Eval("Date1").ToString()).ToString("d") %>' ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<a href="<%#Eval("Link") %>"><asp:Label ID="Label42" runat="server" Text='<%#Eval("Link") %>' ></asp:Label> </a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButtonComment" OnClick="LinkButtonComment_Click" runat="server">Leave a comment</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Fields>
<RowStyle BackColor="White" ForeColor="#333333" />
</asp:DetailsView>
Upvotes: 0
Views: 4987
Reputation: 707
Firstly you can reduce your code and make it more generic like this:
try
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
switch (DropDownListNewsFeed.SelectedItem.Value)
{
case "ALL":
query.Lists = "<Lists>" +
"<List ID=" + web.Lists.TryGetList("Staff News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Company News").ID.ToString() + " />" +
"<List ID=" + web.Lists.TryGetList("Management News").ID.ToString() + " />" +
"</Lists>";
break;
case "Staff News":
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Staff News").ID.ToString() + " /></Lists>";
break;
case "Management News":
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Management News").ID.ToString() + " /></Lists>";
break;
case "Company News":
query.Lists = "<Lists><List ID=" + web.Lists.TryGetList("Company News").ID.ToString() + " /></Lists>";
break;
}
query.ViewFields = "<FieldRef Name=\"Title\" /><FieldRef Name=\"Date1\" Nullable=\"TRUE\"/>";
query.Query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'></FieldRef></OrderBy>";
query.Webs = "<Webs Scope=\"SiteCollection\" />";
query.RowLimit = 10;
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
GridViewNewsFeed.DataSource = dv;
GridViewNewsFeed.DataBind();
}
catch (Exception x)
{
LabelException.Text = x.Message;
}
About your problem:
try to pass item ID (the best is to pass UniqueId) as a "CommandArgument" on the link button. To specify this you can just bind an item ID field to CommandArgument property:
<asp:LinkButton ID="LinkButton1" OnClick="LinkButton1_Click" CommandArgument="<%# Bind("ItemId") %>" runat="server" Text='<%# Bind("Title") %>'></asp:LinkButton>
On the code behind when button is clicked you can get it using next lines of code:
LinkButton button = (LinkButton) sender;
string itemID = button.CommandArgument;
After you have your ID just get it with clause where:
query.Query = <Where>
<Eq>
<FieldRef Name='ID' />
<Value Type='Text'>ID</Value>
</Eq>
</Where>";
EDITED:
To get a field from SharePoint add "UniqueId" field in query.VieweFields. this will get it from Sharepoint and generate in the DataTable:
query.ViewFields = "<FieldRef Name=\"UniqueId\"/>";
To get value of this field on code behind in the button event methode do following:
SPFieldLookupValue f = new SPFieldLookupValue(button.CommandArgument); string itemID = f.LookupValue;
Hope it helps,
Andrew
Upvotes: 1