SlideShare a Scribd company logo
Creating a DotNetNuke® Module using LINQ
to SQL
By defwebserver | 24 Jan 2008 | Unedited contribution
.NET3.5ASPASP.NETJavascriptCSS.NETHTMLDevAjaxLINQ
This tutorial will show you how to create a DotNetNuke module using LINQ to SQL.
Part of The HTML5 / CSS3 Zone
See Also
• More like this
• More by this author
Article Browse Code Stats Revisions Alternatives
4.61 (10 votes)
30
• Download LinqThings4Sale_01 - 5 KB
To use this tutorial you need:
1. Visual Studio Visual Web Developer Express 2008 (download) or Visual Studio
2008
2. DotNetNuke (download)
3. ASP.NET 3.5 (or higher) (download)
This tutorial will show you how to create a DotNetNuke module using LINQ to SQL.
This will greatly speed module development.
Also see:
Creating a DotNetNuke Module using LINQ to SQL (Part 2)
SETUP
Follow one of the the options below to install DotNetNuke and to create a
DotNetNuke Website:
 Setting-up the Development Environment (using IIS)
 Setting-up the Development Environment (without IIS)
 Setting-up the Development Environment on Windows Vista (using IIS)
Install Visual Studio Express 2008 if you haven't already done so. (download)
Use Visual Studio 2008 to open DotNetNuke:
If using DotNetNuke 4.7 or lower, you will get a message like this:
Click Yes. This will add the needed changes to the web.config to allow LINQ to SQL to
run.
In Visual Studio, select "Build" then "Build Solution". You must be able to build it
without errors before you continue. Warnings are ok.
Are you Ready to Create the Module?
You must have a DotNetNuke 4 website up and running to continue. If you do not
you can use this link and this link to find help.
DotNetNuke is constantly changing as it evolves so the best way to get up-to-date
help and information is to use theDotNetNuke message board.
Create the Table
Log into the website using the Host account.
Click on the HOST menu and select SQL
Paste the following script into the box:
Collapse | Copy Code
CREATE TABLE ThingsForSale (
[ID] [int] IDENTITY(1,1) NOT NULL,
[ModuleId] [int] NOT NULL,
[UserID] [int] NULL,
[Category] [nvarchar](25),
[Description] [nvarchar](500),
[Price] [float] NULL
) ON [PRIMARY]
ALTER TABLE ThingsForSale ADD
CONSTRAINT [PK_ThingsForSale] PRIMARY KEY CLUSTERED
([ID]) ON [PRIMARY]
Select the "Run as Script" box and click "Execute".
Set Up The Module
If you haven't already opened the DotNetNuke site in Visual Studio (or Visual Web
Developer Express), select Filethen Open Web Site.
Select the root of the DotNetNuke site and click the Open button.
Right-click on the App_Code folder and select New Folder.
Name the folder LinqThings4Sale.
In the Solution Explorer, double-click on the web.config file to open it.
In the web.config file add the line:
<add directoryName="LinqThings4Sale" />
to the <codeSubDirectories> section. This is done to instruct ASP.NET that there
will be code created in a language other than VB.NET (which is the language of the
main DotNetNuke project).
Right-click on the App_Code folder and select Refresh Folder.
The LinqThings4Sale folder icon will now change to indicate that the folder is now
recognized as a special folder.
Create the LINQ to SQL Class
Right-click on the LinqThings4Sale directory located under
the App_Code directory and select Add New Item.
In the Add New Item window, select the LINQ to SQL Classes template,
enter LinqThings4Sale.dbml for theName and select Visual C# for
the Language. Click the Add button.
Wait a few minutes and the Object Relational Designer will open in the Edit
window.
From the toolbar, select View then Server Explorer.
In the Server Explorer, right-click on the root node (Data Connections) and
select Add Connection.
Enter the information to connect to the database the DotNetNuke site is running on.
This will not be the connection that the module will use when it runs (you will set
that connection in a later step). This is only a connection to allow you to use
the Object Relational Designer.Click the OK button.
When the connection shows up in the Server Explorer, click the plus icon to expand
it's object tree to display the tables.
Locate the ThingsForSale table.
Click on it and drag and drop it on the Object Relational Designer panel on the
left.
Click anywhere in the white space on the Object Relational Designer panel so that
theLinqThings4SaleDataContext properties show in the Properties window (you
can also select it from the drop-down in the properties window).
In the Connection drop-down select SiteSqlServer (Web.config). This instructs the
class to use the connection string of the DotNetNuke site that it is running on.
The connection properties should resemble the graphic on the right.
Close the LinqThings4Sale.dbl file. You should see a confirmation screen asking
you to save it. Click the Yes button.
The Data Access layer is now complete.
Create The Module
In the Solution Explorer, Right-click on the DesktopModules folder and
select New Folder.
Name the folder LinqThings4Sale.
Right-click on the LinqThings4Sale folder and select Add New Item.
From the Add New Item box, select the Web User Control template,
enter View.ascx for the Name, select Visual C# for the Language, and check the
box next to Place code in separate file.
When the View.ascx page opens, switch to source view and locate
the Inherits line.
Change it to:
DotNetNuke.Modules.LinqThings4Sale.View
Save the file.
Click the plus icon next to the View.ascx file in the Solution Explorer (under the
LinqThings4Sale directory) Double-click on the View.ascx.cs file to open it.
Replace all the code with the following code:
Collapse | Copy Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DotNetNuke;
using DotNetNuke.Security;
using LinqThings4Sale;
namespace DotNetNuke.Modules.LinqThings4Sale
{
public partial class View : DotNetNuke.Entities.Modules.PortalModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Save the file. From the Toolbar, select Build then Build Page. The page should
build without errors.
Switch to the View.ascx file and switch to the Design View. From the Toolbox, in
the Data section, select theLinqDataSource control.
Drag the LinqDataSource control to the design surface of the View.ascx page.
Click on the options (right-arrow on the right side of the control) and
select Configure Data Source.
In the Configure Data Source box,
select LinqThings4Sale.LinqThings4SaleDataContext in the drop-down and click
the Next button.
The Configure Data Selection screen will show. Leave the default options.
Click the Where button.
On the Configure Where Expression screen:
• Select ModuleId in the Column drop-down
• Select = = in the Operator drop-down
• Select None for the Source drop-down
Click the Add button.
This instructs the LinqDataSource control to filter the results by ModuleId. Each
new instance of the module will have a different ModuleId. We will pass
this ModuleId to the LinqDataSource control in the code behind in a later
step. Click the OK button.
Click the Finish button.
On the options for the LinqDataSource control, check the box next to Enable
Delete, Enable Insert, and Enable Update.
Drag a GiridView control from the Toolbox and place it under
the LinqDataSource conrol. On the options for theGridView control,
select LinqDataSource1 from the Choose Data Source drop-down.
The GridView will bind to the data source and create columns for the fields in the
table.
On the options for the GridView control, check the box next to Enable
Paging, Enable Sorting, Enable Editing, and Enable Deleting.
On the options for the GridView control, click the Edit Columns link.
Select the ID column in the Selected Fields section, and under
the BoundField properties section, change Visibleto False. Do the same for
the ModuleId and UserID fields. Click the OK button.
The GridView will now resemble the image on the right.
Drag a FormView control to the design surface and place it a few spaces below
the GridView (you will have to place a LinkButton control between them in a later
step).
On the options for the FormView control, select LinqDataSource1 on the Choose
Data Source drop-down. Click the Edit Templates link.
On the options for the FormView control, select InsertItem Template on
the Display
drop-down.
Switch to source view and replace the InsertItemTemplate section with the
following code:
Collapse | Copy Code
<InsertItemTemplate>
Category: <asp:DropDownList ID="DropDownList1" runat="server"
DataSource='<%# Eval("Category") %>'
SelectedValue='<%# Bind("Category") %>' EnableViewState="False">
<asp:ListItem>Home</asp:ListItem>
<asp:ListItem>Office</asp:ListItem>
<asp:ListItem>Electronics</asp:ListItem>
<asp:ListItem>Misc.</asp:ListItem>
</asp:DropDownList>
Price: $
<asp:TextBox ID="PriceTextBox" runat="server" Text='<%# Bind("Price")
%>' Width="56px"
CausesValidation="True" EnableViewState="False"></asp:TextBox><br />
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="PriceTextBox"
ErrorMessage="Price must be greater than 0" MaximumValue="99999"
MinimumValue="1"></asp:RangeValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="PriceTextBox"
ErrorMessage="A price is required"></asp:RequiredFieldValidator><br />
Description:<br />
<asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%#
Bind("Description") %>'
MaxLength="499" TextMode="MultiLine" Width="286px"
EnableViewState="False"></asp:TextBox><br
/>
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert"
Text="Insert" OnClick="InsertButton_Click"></asp:LinkButton>
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False"
CommandName="Cancel"
Text="Cancel" OnClick="InsertCancelButton_Click"></asp:LinkButton>
</InsertItemTemplate>
Switch to design view, Select Edit Templates and then select InsertItem
Template and the form will resemble the image on the right.
On the options for the FormView control, click on End Template Editing.
In the Properties for the FormView, set the DefaultMode to Insert.
Also, in the Properties for the FormView, set Visible to False.
In the ToolBox, click on the LinkButton control.
Drag the control to the design surface and drop it between the GridView and
the FormView.
In the properties for the LinkButton (if you have a hard time selecting the
properties, switch to source view and double-click on "<asp:LinkButton"), set
the Text to Add My Listing.
Create the Code Behind
The View.ascx file should now resemble the image on the right. A few code behind
methods are now required to complete the module.
Code Behind for the LinqDataSource Control
We want to alter the behavior of the LinqDataSource control so that it only shows
the records for this particular instance of the module. In addition, when inserting a
record we want to insert the current ModuleId and the currentUserID. Right-click
on the LinqDataSource control and select Properties. The properties will show up
in theProperties window (if it doesn't, switch to source view and click
on "<asp:LinqDataSource").
Click on the yellow "lighting bolt" to switch to the "events" for the control
On the Inserted row type LinqDataSource1_Inserted and click away (or you can
just double-click in the box and the name will be inserted for you).
A method will be automatically "wired-up".
Add code so the method reads:
Collapse | Copy Code
protected void LinqDataSource1_Inserted(object sender,
LinqDataSourceStatusEventArgs e)
{
this.GridView1.DataBind();
}
(this method instructs the GridView to refresh itself after a record has been
inserted) On the Inserting row typeLinqDataSource1_Inserting and click away.
Add code so the method reads:
Collapse | Copy Code
protected void LinqDataSource1_Inserting(object sender,
LinqDataSourceInsertEventArgs e)
{
ThingsForSale ThingsForSale = (ThingsForSale)e.NewObject;
ThingsForSale.UserID =
Entities.Users.UserController.GetCurrentUserInfo().UserID;
ThingsForSale.ModuleId = ModuleId;
}
(this method casts "e" which is an instance of the object containing the data about to
be inserted, as a ThingsForSale object. It then sets the UserID and the
ModuleId. ) On the Selecting row typeLinqDataSource1_Selecting and click
away.
Add code so the method reads:
Collapse | Copy Code
protected void LinqDataSource1_Selecting(object sender,
LinqDataSourceSelectEventArgs e)
{
e.WhereParameters["ModuleId"] = ModuleId;
}
(this method passes the current ModuleId to the LinqDataSource control. You will
recall that a where clause was defined to expect a ModuleId to be passed.)
Code Behind for the Add My Listing link
Double-click on the Add My Listing link.
Add code so the method reads:
Collapse | Copy Code
protected void LinkButton1_Click(object sender, EventArgs e)
{
this.FormView1.Visible = true;
this.GridView1.DataBind();
}
(this method makes the entry form visible. )
Code Behind for the GridView
Right-click on the GridView control and select Properties. The properties will show
up in the Properties window (if it doesn't, switch to source view and click
on "<asp:GridView"). Switch to events and enterGridView1_RowDataBound for
the RowDataBound row and click away.
Add code so the method reads:
Collapse | Copy Code
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if ((e.Row.RowType == DataControlRowType.DataRow))
{
ThingsForSale ThingsForSale = ((ThingsForSale)(e.Row.DataItem));
if ((PortalSecurity.IsInRole("Administrators"))
|| (Entities.Users.UserController.GetCurrentUserInfo().UserID ==
(int)ThingsForSale.UserID))
{
e.Row.Cells[0].Enabled = true;
}
else
{
e.Row.Cells[0].Text = " ";
}
}
}
(this method casts "e" which is an instance of the object that contains the data for
the current row, as a ThingsForSale object. It then compares the UserID to the
UserID of the current user. If the UserID matches the current user or the current
user is an administrator it enables the first column on the GridView (this allows a
user to edit the row)).
Add Additional Methods to the Code behind
Add these two methods to the code behind:
Collapse | Copy Code
protected void InsertButton_Click(object sender, EventArgs e)
{
this.FormView1.Visible = false;
LinkButton1.Text = "Update Successful - Add Another Listing";
this.GridView1.DataBind();
}
protected void InsertCancelButton_Click(object sender, EventArgs e)
{
this.FormView1.Visible = false;
this.GridView1.DataBind();
}
(The events for these two methods was created when the code was pasted in the
earlier step) Alter thePage_Load method in the code behind so it reads:
Collapse | Copy Code
protected void Page_Load(object sender, EventArgs e)
{
if ((PortalSecurity.IsInRole("Registered Users") ||
PortalSecurity.IsInRole("Administrators")))
{
LinkButton1.Enabled = true;
}
else
{
LinkButton1.Text = "You must be logged in to add a Listing";
LinkButton1.Enabled = false;
}
}
(This code determines if the user is logged in and displays the Add Listing link if they
are).
Save the file. From the Toolbar, select Build then Build Page. The page should
build without errors.
Create The Module Definition
While logged into your DotNetNuke site as "host", in the web browser, from the
menu bar select "Host". Then select "Module Definitions".
Click the black arrow that is pointing down to make the fly-out menu to appear. On
that menu select "Create Module Definition".
In the Edit Module Definitions menu:
• Enter "LinqThings4Sale" for MODULE NAME
• Enter "LinqThings4Sale" for FOLDER TITLE
• Enter "LinqThings4Sale" for FRIENDLY NAME
• Enter "LinqThings4Sale" for DESCRIPTION
• Enter "01.00.00" for VERSION
Then click UPDATE
Enter "LinqThings4Sale" for NEW DEFINITION Then click "Add Definition"
Next, click "Add Control"
In the Edit Module Control menu:
• Enter "LinqThings4Sale" for TITLE
• Use the drop-down to select "DesktopModules/LinqThings4Sale/View.ascx"
for SOURCE
• Use the drop-down to select "View" for TYPE
Then click UPDATE
In the upper left hand corner of the website, under the PAGE FUNCTIONS menu
click ADD.
In the PAGE MANAGEMENT menu under PAGE DETAILS:
• Enter "LinqThings4Sale" for PAGE NAME
• Enter "LinqThings4Sale" for PAGE TITLE
• Enter "LinqThings4Sale" for DESCRIPTION
• Click the VIEW PAGE box next to ALL USERS
Then click UPDATE
From the MODULE drop-down select "LinqThings4Sale".
Then click ADD.
The module will now appear.
The tutorial is complete.
Note: In order to run this module on another DotNetNuke site, you need to install
ASP.NET 3.5 on the server and modify the web.config of the DotNetNuke site:
Change: the <system.codedom> section to:
Collapse | Copy Code
<system.codedom>
<compilers>
<compiler language="vb;vbs;visualbasic;vbscript"
type="Microsoft.VisualBasic.VBCodeProvider, System,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
extension=".vb" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CSharp.CSharpCodeProvider,System,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
 Change: the <assemblies> section to:
Collapse | Copy Code
<assemblies>
<add assembly="Microsoft.VisualBasic,
Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Management, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
</assemblies>
License
This article, along with any associated source code and files, is licensed under The
BSD License

More Related Content

What's hot

ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
vchircu
 
SYSTEMS DESIGN / CAPSTONE PROJECT
SYSTEMS DESIGN / CAPSTONE PROJECTSYSTEMS DESIGN / CAPSTONE PROJECT
SYSTEMS DESIGN / CAPSTONE PROJECT
Sanjay Saluth
 
Deploying configuring caching
Deploying configuring cachingDeploying configuring caching
Deploying configuring cachingaspnet123
 
Oracle EMC 12C Grand Tour
Oracle EMC 12C Grand TourOracle EMC 12C Grand Tour
Oracle EMC 12C Grand Tour
Rakesh Gujjarlapudi
 
Chapter 07
Chapter 07Chapter 07
Chapter 07llmeade
 
Intake 37 9
Intake 37 9Intake 37 9
Intake 37 9
Mahmoud Ouf
 
Chapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface DesignChapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface Design
francopw
 
Programming Without Coding Technology (PWCT) - RMChart ActiveX
Programming Without Coding Technology (PWCT) - RMChart ActiveXProgramming Without Coding Technology (PWCT) - RMChart ActiveX
Programming Without Coding Technology (PWCT) - RMChart ActiveX
Mahmoud Samir Fayed
 
Chapter 03
Chapter 03Chapter 03
Chapter 03llmeade
 
Talha document file 1
Talha document file 1Talha document file 1
Talha document file 1
talhasendu
 
Autocad excel vba
Autocad excel vbaAutocad excel vba
Autocad excel vbarjg_vijay
 
Intake 38 8
Intake 38 8Intake 38 8
Intake 38 8
Mahmoud Ouf
 
The Ring programming language version 1.3 book - Part 54 of 88
The Ring programming language version 1.3 book - Part 54 of 88The Ring programming language version 1.3 book - Part 54 of 88
The Ring programming language version 1.3 book - Part 54 of 88
Mahmoud Samir Fayed
 
MS Access Macros
MS Access MacrosMS Access Macros
MS Access Macros
Paul Barnett
 
Enabling macro in access 2007
Enabling macro in access 2007Enabling macro in access 2007
Enabling macro in access 2007
Kopi Ais
 

What's hot (15)

ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
ChircuVictor StefircaMadalin rad_aspmvc3_wcf_vs2010
 
SYSTEMS DESIGN / CAPSTONE PROJECT
SYSTEMS DESIGN / CAPSTONE PROJECTSYSTEMS DESIGN / CAPSTONE PROJECT
SYSTEMS DESIGN / CAPSTONE PROJECT
 
Deploying configuring caching
Deploying configuring cachingDeploying configuring caching
Deploying configuring caching
 
Oracle EMC 12C Grand Tour
Oracle EMC 12C Grand TourOracle EMC 12C Grand Tour
Oracle EMC 12C Grand Tour
 
Chapter 07
Chapter 07Chapter 07
Chapter 07
 
Intake 37 9
Intake 37 9Intake 37 9
Intake 37 9
 
Chapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface DesignChapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface Design
 
Programming Without Coding Technology (PWCT) - RMChart ActiveX
Programming Without Coding Technology (PWCT) - RMChart ActiveXProgramming Without Coding Technology (PWCT) - RMChart ActiveX
Programming Without Coding Technology (PWCT) - RMChart ActiveX
 
Chapter 03
Chapter 03Chapter 03
Chapter 03
 
Talha document file 1
Talha document file 1Talha document file 1
Talha document file 1
 
Autocad excel vba
Autocad excel vbaAutocad excel vba
Autocad excel vba
 
Intake 38 8
Intake 38 8Intake 38 8
Intake 38 8
 
The Ring programming language version 1.3 book - Part 54 of 88
The Ring programming language version 1.3 book - Part 54 of 88The Ring programming language version 1.3 book - Part 54 of 88
The Ring programming language version 1.3 book - Part 54 of 88
 
MS Access Macros
MS Access MacrosMS Access Macros
MS Access Macros
 
Enabling macro in access 2007
Enabling macro in access 2007Enabling macro in access 2007
Enabling macro in access 2007
 

Viewers also liked

Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềm
Nguyễn Anh
 
Thực tập chuyên ngành CNTT
Thực tập chuyên ngành CNTTThực tập chuyên ngành CNTT
Thực tập chuyên ngành CNTT
Nguyễn Anh
 
Kiếm tiền với Clickbank và Slideshare
Kiếm tiền với Clickbank và SlideshareKiếm tiền với Clickbank và Slideshare
Kiếm tiền với Clickbank và Slideshare
FXVIET DAUTUFOREX
 
Linux và mã nguồn mở
Linux và mã nguồn mởLinux và mã nguồn mở
Linux và mã nguồn mở
Nguyễn Anh
 
Bìa ĐHBKHN
Bìa ĐHBKHNBìa ĐHBKHN
Bìa ĐHBKHN
Nguyễn Anh
 
Thủ thuật PC hay
Thủ thuật PC hayThủ thuật PC hay
Thủ thuật PC hay
Nguyễn Anh
 
Tăng tốc win XP
Tăng tốc win XPTăng tốc win XP
Tăng tốc win XP
Nguyễn Anh
 
Xem tivi online trực tiếp trên windows media player
Xem tivi online trực tiếp trên windows media playerXem tivi online trực tiếp trên windows media player
Xem tivi online trực tiếp trên windows media player
Nguyễn Anh
 
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại runTruy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
Nguyễn Anh
 
Sử dụng windows XP
Sử dụng windows XPSử dụng windows XP
Sử dụng windows XP
Nguyễn Anh
 
76 mẹo trong XP
76 mẹo trong XP76 mẹo trong XP
76 mẹo trong XP
Nguyễn Anh
 
Thủ thuật XP
Thủ thuật XPThủ thuật XP
Thủ thuật XP
Nguyễn Anh
 
Máy tính của bạn càng ngày càng chậm
Máy tính của bạn càng ngày càng chậmMáy tính của bạn càng ngày càng chậm
Máy tính của bạn càng ngày càng chậm
Nguyễn Anh
 
Tăng tốc toàn diện cho Firefox
Tăng tốc toàn diện cho FirefoxTăng tốc toàn diện cho Firefox
Tăng tốc toàn diện cho Firefox
Nguyễn Anh
 

Viewers also liked (14)

Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềm
 
Thực tập chuyên ngành CNTT
Thực tập chuyên ngành CNTTThực tập chuyên ngành CNTT
Thực tập chuyên ngành CNTT
 
Kiếm tiền với Clickbank và Slideshare
Kiếm tiền với Clickbank và SlideshareKiếm tiền với Clickbank và Slideshare
Kiếm tiền với Clickbank và Slideshare
 
Linux và mã nguồn mở
Linux và mã nguồn mởLinux và mã nguồn mở
Linux và mã nguồn mở
 
Bìa ĐHBKHN
Bìa ĐHBKHNBìa ĐHBKHN
Bìa ĐHBKHN
 
Thủ thuật PC hay
Thủ thuật PC hayThủ thuật PC hay
Thủ thuật PC hay
 
Tăng tốc win XP
Tăng tốc win XPTăng tốc win XP
Tăng tốc win XP
 
Xem tivi online trực tiếp trên windows media player
Xem tivi online trực tiếp trên windows media playerXem tivi online trực tiếp trên windows media player
Xem tivi online trực tiếp trên windows media player
 
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại runTruy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
Truy cập nhanh ứng dụng trong windows bằng lệnh trong hộp thoại run
 
Sử dụng windows XP
Sử dụng windows XPSử dụng windows XP
Sử dụng windows XP
 
76 mẹo trong XP
76 mẹo trong XP76 mẹo trong XP
76 mẹo trong XP
 
Thủ thuật XP
Thủ thuật XPThủ thuật XP
Thủ thuật XP
 
Máy tính của bạn càng ngày càng chậm
Máy tính của bạn càng ngày càng chậmMáy tính của bạn càng ngày càng chậm
Máy tính của bạn càng ngày càng chậm
 
Tăng tốc toàn diện cho Firefox
Tăng tốc toàn diện cho FirefoxTăng tốc toàn diện cho Firefox
Tăng tốc toàn diện cho Firefox
 

Similar to Creating a dot netnuke

Scaffolding
ScaffoldingScaffolding
Scaffolding
DrMohamed Oaf
 
Grid view control
Grid view controlGrid view control
Grid view control
Paneliya Prince
 
Open microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutletOpen microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutlet
Mitchinson
 
Using prime[31] to connect your unity game to azure mobile services
Using prime[31] to connect your unity game to azure mobile servicesUsing prime[31] to connect your unity game to azure mobile services
Using prime[31] to connect your unity game to azure mobile services
David Voyles
 
Grasping The LightSwitch Paradigm
Grasping The LightSwitch ParadigmGrasping The LightSwitch Paradigm
Grasping The LightSwitch Paradigm
Andrew Brust
 
Intellect_Integration_-_Web_Integration_Methods.pdf
Intellect_Integration_-_Web_Integration_Methods.pdfIntellect_Integration_-_Web_Integration_Methods.pdf
Intellect_Integration_-_Web_Integration_Methods.pdf
Modern Modular NY.
 
Cis407 a ilab 3 web application development devry university
Cis407 a ilab 3 web application development devry universityCis407 a ilab 3 web application development devry university
Cis407 a ilab 3 web application development devry universitylhkslkdh89009
 
Oracle ADF 11g Tutorial
Oracle ADF 11g TutorialOracle ADF 11g Tutorial
Oracle ADF 11g Tutorial
Rakesh Gujjarlapudi
 
Informatica complex transformation i
Informatica complex transformation iInformatica complex transformation i
Informatica complex transformation iAmit Sharma
 
Informatica complex transformation ii
Informatica complex transformation iiInformatica complex transformation ii
Informatica complex transformation iiAmit Sharma
 
Web services in asp.net
Web services in asp.netWeb services in asp.net
Web services in asp.net
Dharma Raju
 
Chapter12 (1)
Chapter12 (1)Chapter12 (1)
Chapter12 (1)
Rajalaxmi Pattanaik
 
Tutorial on how to load images in crystal reports dynamically using visual ba...
Tutorial on how to load images in crystal reports dynamically using visual ba...Tutorial on how to load images in crystal reports dynamically using visual ba...
Tutorial on how to load images in crystal reports dynamically using visual ba...
Aeric Poon
 
IntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdfIntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdf
David Harrison
 
IntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdfIntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdf
David Harrison
 
Previous weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docxPrevious weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docx
keilenettie
 
Business Intelligence Technology Presentation
Business Intelligence Technology PresentationBusiness Intelligence Technology Presentation
Business Intelligence Technology Presentation
John Paredes
 

Similar to Creating a dot netnuke (20)

Mca 504 dotnet_unit5
Mca 504 dotnet_unit5Mca 504 dotnet_unit5
Mca 504 dotnet_unit5
 
Scaffolding
ScaffoldingScaffolding
Scaffolding
 
DotNetNuke
DotNetNukeDotNetNuke
DotNetNuke
 
Grid view control
Grid view controlGrid view control
Grid view control
 
Open microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutletOpen microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutlet
 
Using prime[31] to connect your unity game to azure mobile services
Using prime[31] to connect your unity game to azure mobile servicesUsing prime[31] to connect your unity game to azure mobile services
Using prime[31] to connect your unity game to azure mobile services
 
Grasping The LightSwitch Paradigm
Grasping The LightSwitch ParadigmGrasping The LightSwitch Paradigm
Grasping The LightSwitch Paradigm
 
Intellect_Integration_-_Web_Integration_Methods.pdf
Intellect_Integration_-_Web_Integration_Methods.pdfIntellect_Integration_-_Web_Integration_Methods.pdf
Intellect_Integration_-_Web_Integration_Methods.pdf
 
Cis407 a ilab 3 web application development devry university
Cis407 a ilab 3 web application development devry universityCis407 a ilab 3 web application development devry university
Cis407 a ilab 3 web application development devry university
 
Oracle ADF 11g Tutorial
Oracle ADF 11g TutorialOracle ADF 11g Tutorial
Oracle ADF 11g Tutorial
 
Informatica complex transformation i
Informatica complex transformation iInformatica complex transformation i
Informatica complex transformation i
 
Informatica complex transformation ii
Informatica complex transformation iiInformatica complex transformation ii
Informatica complex transformation ii
 
Web services in asp.net
Web services in asp.netWeb services in asp.net
Web services in asp.net
 
Chapter12 (1)
Chapter12 (1)Chapter12 (1)
Chapter12 (1)
 
Tutorial on how to load images in crystal reports dynamically using visual ba...
Tutorial on how to load images in crystal reports dynamically using visual ba...Tutorial on how to load images in crystal reports dynamically using visual ba...
Tutorial on how to load images in crystal reports dynamically using visual ba...
 
Vb%20 tutorial
Vb%20 tutorialVb%20 tutorial
Vb%20 tutorial
 
IntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdfIntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdf
 
IntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdfIntoTheNebulaArticle.pdf
IntoTheNebulaArticle.pdf
 
Previous weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docxPrevious weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docx
 
Business Intelligence Technology Presentation
Business Intelligence Technology PresentationBusiness Intelligence Technology Presentation
Business Intelligence Technology Presentation
 

More from Nguyễn Anh

Báo cáo đồ họa máy tính - Computer graphics
Báo cáo đồ họa máy tính - Computer graphicsBáo cáo đồ họa máy tính - Computer graphics
Báo cáo đồ họa máy tính - Computer graphics
Nguyễn Anh
 
Game programming - Hexagon
Game programming - HexagonGame programming - Hexagon
Game programming - Hexagon
Nguyễn Anh
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
Nguyễn Anh
 
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềmNghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
Nguyễn Anh
 
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế website cho giảng viên Việ...
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế  website cho giảng viên Việ...Ứng dụng ngôn ngữ UML trong phân tích và thiết kế  website cho giảng viên Việ...
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế website cho giảng viên Việ...
Nguyễn Anh
 
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Nguyễn Anh
 
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMSldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
Nguyễn Anh
 
Tìm hiểu về kỹ thuật Kiểm thử phần mềm
Tìm hiểu về kỹ thuật Kiểm thử phần mềmTìm hiểu về kỹ thuật Kiểm thử phần mềm
Tìm hiểu về kỹ thuật Kiểm thử phần mềm
Nguyễn Anh
 
Bảo trì phần mềm
Bảo trì phần mềmBảo trì phần mềm
Bảo trì phần mềm
Nguyễn Anh
 
Embedded beta2 new
Embedded beta2 newEmbedded beta2 new
Embedded beta2 new
Nguyễn Anh
 
Embedded linux edited
Embedded linux editedEmbedded linux edited
Embedded linux edited
Nguyễn Anh
 
Slide Các kỹ thuật bảo trì phần mềm
Slide Các kỹ thuật bảo trì phần mềmSlide Các kỹ thuật bảo trì phần mềm
Slide Các kỹ thuật bảo trì phần mềm
Nguyễn Anh
 
Các kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềmCác kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềm
Nguyễn Anh
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
Đào tạo ĐH
Đào tạo ĐHĐào tạo ĐH
Đào tạo ĐH
Nguyễn Anh
 
Cài đặt windows mà không cần phải kích hoạt
Cài đặt  windows mà không cần phải kích hoạtCài đặt  windows mà không cần phải kích hoạt
Cài đặt windows mà không cần phải kích hoạt
Nguyễn Anh
 
System hacking
System hackingSystem hacking
System hacking
Nguyễn Anh
 
Hoc internet
Hoc internetHoc internet
Hoc internet
Nguyễn Anh
 

More from Nguyễn Anh (20)

Báo cáo đồ họa máy tính - Computer graphics
Báo cáo đồ họa máy tính - Computer graphicsBáo cáo đồ họa máy tính - Computer graphics
Báo cáo đồ họa máy tính - Computer graphics
 
Game programming - Hexagon
Game programming - HexagonGame programming - Hexagon
Game programming - Hexagon
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềmNghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
Nghiên cứu chuẩn ISO/IEC 9126 trong đánh giá chất lượng phần mềm
 
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế website cho giảng viên Việ...
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế  website cho giảng viên Việ...Ứng dụng ngôn ngữ UML trong phân tích và thiết kế  website cho giảng viên Việ...
Ứng dụng ngôn ngữ UML trong phân tích và thiết kế website cho giảng viên Việ...
 
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.Tìm hiểu các kỹ thuật kiểm thử phần mềm  ứng dụng trong lập trình Java.
Tìm hiểu các kỹ thuật kiểm thử phần mềm ứng dụng trong lập trình Java.
 
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMSldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Sldie TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
Tìm Hiểu Các Kỹ Thuật Kiểm Thử Phần Mềm và Một Số Ứng Dụng Trong Thực Tế
 
Tìm hiểu về kỹ thuật Kiểm thử phần mềm
Tìm hiểu về kỹ thuật Kiểm thử phần mềmTìm hiểu về kỹ thuật Kiểm thử phần mềm
Tìm hiểu về kỹ thuật Kiểm thử phần mềm
 
Bảo trì phần mềm
Bảo trì phần mềmBảo trì phần mềm
Bảo trì phần mềm
 
Embedded beta2 new
Embedded beta2 newEmbedded beta2 new
Embedded beta2 new
 
Embedded linux edited
Embedded linux editedEmbedded linux edited
Embedded linux edited
 
Slide Các kỹ thuật bảo trì phần mềm
Slide Các kỹ thuật bảo trì phần mềmSlide Các kỹ thuật bảo trì phần mềm
Slide Các kỹ thuật bảo trì phần mềm
 
Các kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềmCác kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềm
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Đào tạo ĐH
Đào tạo ĐHĐào tạo ĐH
Đào tạo ĐH
 
Cài đặt windows mà không cần phải kích hoạt
Cài đặt  windows mà không cần phải kích hoạtCài đặt  windows mà không cần phải kích hoạt
Cài đặt windows mà không cần phải kích hoạt
 
System hacking
System hackingSystem hacking
System hacking
 
Hoc internet
Hoc internetHoc internet
Hoc internet
 

Recently uploaded

The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 

Recently uploaded (20)

The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 

Creating a dot netnuke

  • 1. Creating a DotNetNuke® Module using LINQ to SQL By defwebserver | 24 Jan 2008 | Unedited contribution .NET3.5ASPASP.NETJavascriptCSS.NETHTMLDevAjaxLINQ This tutorial will show you how to create a DotNetNuke module using LINQ to SQL. Part of The HTML5 / CSS3 Zone See Also • More like this • More by this author Article Browse Code Stats Revisions Alternatives 4.61 (10 votes) 30 • Download LinqThings4Sale_01 - 5 KB To use this tutorial you need: 1. Visual Studio Visual Web Developer Express 2008 (download) or Visual Studio 2008 2. DotNetNuke (download) 3. ASP.NET 3.5 (or higher) (download) This tutorial will show you how to create a DotNetNuke module using LINQ to SQL. This will greatly speed module development. Also see: Creating a DotNetNuke Module using LINQ to SQL (Part 2)
  • 2. SETUP Follow one of the the options below to install DotNetNuke and to create a DotNetNuke Website:  Setting-up the Development Environment (using IIS)  Setting-up the Development Environment (without IIS)  Setting-up the Development Environment on Windows Vista (using IIS) Install Visual Studio Express 2008 if you haven't already done so. (download) Use Visual Studio 2008 to open DotNetNuke: If using DotNetNuke 4.7 or lower, you will get a message like this: Click Yes. This will add the needed changes to the web.config to allow LINQ to SQL to run. In Visual Studio, select "Build" then "Build Solution". You must be able to build it without errors before you continue. Warnings are ok. Are you Ready to Create the Module? You must have a DotNetNuke 4 website up and running to continue. If you do not you can use this link and this link to find help.
  • 3. DotNetNuke is constantly changing as it evolves so the best way to get up-to-date help and information is to use theDotNetNuke message board. Create the Table Log into the website using the Host account. Click on the HOST menu and select SQL Paste the following script into the box: Collapse | Copy Code CREATE TABLE ThingsForSale ( [ID] [int] IDENTITY(1,1) NOT NULL, [ModuleId] [int] NOT NULL, [UserID] [int] NULL, [Category] [nvarchar](25), [Description] [nvarchar](500), [Price] [float] NULL ) ON [PRIMARY] ALTER TABLE ThingsForSale ADD CONSTRAINT [PK_ThingsForSale] PRIMARY KEY CLUSTERED ([ID]) ON [PRIMARY]
  • 4. Select the "Run as Script" box and click "Execute". Set Up The Module If you haven't already opened the DotNetNuke site in Visual Studio (or Visual Web Developer Express), select Filethen Open Web Site. Select the root of the DotNetNuke site and click the Open button. Right-click on the App_Code folder and select New Folder.
  • 5. Name the folder LinqThings4Sale. In the Solution Explorer, double-click on the web.config file to open it. In the web.config file add the line: <add directoryName="LinqThings4Sale" /> to the <codeSubDirectories> section. This is done to instruct ASP.NET that there will be code created in a language other than VB.NET (which is the language of the main DotNetNuke project). Right-click on the App_Code folder and select Refresh Folder. The LinqThings4Sale folder icon will now change to indicate that the folder is now recognized as a special folder.
  • 6. Create the LINQ to SQL Class Right-click on the LinqThings4Sale directory located under the App_Code directory and select Add New Item. In the Add New Item window, select the LINQ to SQL Classes template, enter LinqThings4Sale.dbml for theName and select Visual C# for the Language. Click the Add button. Wait a few minutes and the Object Relational Designer will open in the Edit window.
  • 7. From the toolbar, select View then Server Explorer. In the Server Explorer, right-click on the root node (Data Connections) and select Add Connection. Enter the information to connect to the database the DotNetNuke site is running on. This will not be the connection that the module will use when it runs (you will set that connection in a later step). This is only a connection to allow you to use the Object Relational Designer.Click the OK button.
  • 8. When the connection shows up in the Server Explorer, click the plus icon to expand it's object tree to display the tables.
  • 9. Locate the ThingsForSale table. Click on it and drag and drop it on the Object Relational Designer panel on the left. Click anywhere in the white space on the Object Relational Designer panel so that theLinqThings4SaleDataContext properties show in the Properties window (you can also select it from the drop-down in the properties window). In the Connection drop-down select SiteSqlServer (Web.config). This instructs the class to use the connection string of the DotNetNuke site that it is running on.
  • 10. The connection properties should resemble the graphic on the right. Close the LinqThings4Sale.dbl file. You should see a confirmation screen asking you to save it. Click the Yes button.
  • 11. The Data Access layer is now complete. Create The Module In the Solution Explorer, Right-click on the DesktopModules folder and select New Folder. Name the folder LinqThings4Sale. Right-click on the LinqThings4Sale folder and select Add New Item.
  • 12. From the Add New Item box, select the Web User Control template, enter View.ascx for the Name, select Visual C# for the Language, and check the box next to Place code in separate file. When the View.ascx page opens, switch to source view and locate the Inherits line. Change it to: DotNetNuke.Modules.LinqThings4Sale.View Save the file. Click the plus icon next to the View.ascx file in the Solution Explorer (under the LinqThings4Sale directory) Double-click on the View.ascx.cs file to open it.
  • 13. Replace all the code with the following code: Collapse | Copy Code using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using DotNetNuke; using DotNetNuke.Security; using LinqThings4Sale; namespace DotNetNuke.Modules.LinqThings4Sale { public partial class View : DotNetNuke.Entities.Modules.PortalModuleBase { protected void Page_Load(object sender, EventArgs e) { } } }
  • 14. Save the file. From the Toolbar, select Build then Build Page. The page should build without errors. Switch to the View.ascx file and switch to the Design View. From the Toolbox, in the Data section, select theLinqDataSource control. Drag the LinqDataSource control to the design surface of the View.ascx page. Click on the options (right-arrow on the right side of the control) and select Configure Data Source.
  • 15. In the Configure Data Source box, select LinqThings4Sale.LinqThings4SaleDataContext in the drop-down and click the Next button. The Configure Data Selection screen will show. Leave the default options.
  • 16. Click the Where button. On the Configure Where Expression screen: • Select ModuleId in the Column drop-down • Select = = in the Operator drop-down • Select None for the Source drop-down Click the Add button.
  • 17. This instructs the LinqDataSource control to filter the results by ModuleId. Each new instance of the module will have a different ModuleId. We will pass this ModuleId to the LinqDataSource control in the code behind in a later step. Click the OK button.
  • 18. Click the Finish button.
  • 19. On the options for the LinqDataSource control, check the box next to Enable Delete, Enable Insert, and Enable Update. Drag a GiridView control from the Toolbox and place it under the LinqDataSource conrol. On the options for theGridView control, select LinqDataSource1 from the Choose Data Source drop-down. The GridView will bind to the data source and create columns for the fields in the table.
  • 20. On the options for the GridView control, check the box next to Enable Paging, Enable Sorting, Enable Editing, and Enable Deleting. On the options for the GridView control, click the Edit Columns link.
  • 21. Select the ID column in the Selected Fields section, and under the BoundField properties section, change Visibleto False. Do the same for the ModuleId and UserID fields. Click the OK button. The GridView will now resemble the image on the right.
  • 22. Drag a FormView control to the design surface and place it a few spaces below the GridView (you will have to place a LinkButton control between them in a later step). On the options for the FormView control, select LinqDataSource1 on the Choose Data Source drop-down. Click the Edit Templates link.
  • 23. On the options for the FormView control, select InsertItem Template on the Display drop-down. Switch to source view and replace the InsertItemTemplate section with the following code: Collapse | Copy Code <InsertItemTemplate> Category: <asp:DropDownList ID="DropDownList1" runat="server" DataSource='<%# Eval("Category") %>' SelectedValue='<%# Bind("Category") %>' EnableViewState="False"> <asp:ListItem>Home</asp:ListItem> <asp:ListItem>Office</asp:ListItem> <asp:ListItem>Electronics</asp:ListItem> <asp:ListItem>Misc.</asp:ListItem> </asp:DropDownList> Price: $ <asp:TextBox ID="PriceTextBox" runat="server" Text='<%# Bind("Price") %>' Width="56px" CausesValidation="True" EnableViewState="False"></asp:TextBox><br /> <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="PriceTextBox" ErrorMessage="Price must be greater than 0" MaximumValue="99999" MinimumValue="1"></asp:RangeValidator> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="PriceTextBox" ErrorMessage="A price is required"></asp:RequiredFieldValidator><br /> Description:<br /> <asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%# Bind("Description") %>' MaxLength="499" TextMode="MultiLine" Width="286px" EnableViewState="False"></asp:TextBox><br /> <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" OnClick="InsertButton_Click"></asp:LinkButton> <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" OnClick="InsertCancelButton_Click"></asp:LinkButton>
  • 24. </InsertItemTemplate> Switch to design view, Select Edit Templates and then select InsertItem Template and the form will resemble the image on the right. On the options for the FormView control, click on End Template Editing.
  • 25. In the Properties for the FormView, set the DefaultMode to Insert. Also, in the Properties for the FormView, set Visible to False. In the ToolBox, click on the LinkButton control.
  • 26. Drag the control to the design surface and drop it between the GridView and the FormView. In the properties for the LinkButton (if you have a hard time selecting the properties, switch to source view and double-click on "<asp:LinkButton"), set the Text to Add My Listing. Create the Code Behind The View.ascx file should now resemble the image on the right. A few code behind methods are now required to complete the module.
  • 27. Code Behind for the LinqDataSource Control We want to alter the behavior of the LinqDataSource control so that it only shows the records for this particular instance of the module. In addition, when inserting a record we want to insert the current ModuleId and the currentUserID. Right-click on the LinqDataSource control and select Properties. The properties will show up in theProperties window (if it doesn't, switch to source view and click on "<asp:LinqDataSource").
  • 28. Click on the yellow "lighting bolt" to switch to the "events" for the control On the Inserted row type LinqDataSource1_Inserted and click away (or you can just double-click in the box and the name will be inserted for you).
  • 29. A method will be automatically "wired-up". Add code so the method reads: Collapse | Copy Code protected void LinqDataSource1_Inserted(object sender, LinqDataSourceStatusEventArgs e) { this.GridView1.DataBind(); } (this method instructs the GridView to refresh itself after a record has been inserted) On the Inserting row typeLinqDataSource1_Inserting and click away.
  • 30. Add code so the method reads: Collapse | Copy Code protected void LinqDataSource1_Inserting(object sender, LinqDataSourceInsertEventArgs e) { ThingsForSale ThingsForSale = (ThingsForSale)e.NewObject; ThingsForSale.UserID = Entities.Users.UserController.GetCurrentUserInfo().UserID; ThingsForSale.ModuleId = ModuleId; } (this method casts "e" which is an instance of the object containing the data about to be inserted, as a ThingsForSale object. It then sets the UserID and the ModuleId. ) On the Selecting row typeLinqDataSource1_Selecting and click away. Add code so the method reads: Collapse | Copy Code protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e) { e.WhereParameters["ModuleId"] = ModuleId; } (this method passes the current ModuleId to the LinqDataSource control. You will recall that a where clause was defined to expect a ModuleId to be passed.) Code Behind for the Add My Listing link Double-click on the Add My Listing link.
  • 31. Add code so the method reads: Collapse | Copy Code protected void LinkButton1_Click(object sender, EventArgs e) { this.FormView1.Visible = true; this.GridView1.DataBind(); } (this method makes the entry form visible. ) Code Behind for the GridView Right-click on the GridView control and select Properties. The properties will show up in the Properties window (if it doesn't, switch to source view and click on "<asp:GridView"). Switch to events and enterGridView1_RowDataBound for the RowDataBound row and click away. Add code so the method reads: Collapse | Copy Code protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if ((e.Row.RowType == DataControlRowType.DataRow)) { ThingsForSale ThingsForSale = ((ThingsForSale)(e.Row.DataItem)); if ((PortalSecurity.IsInRole("Administrators")) || (Entities.Users.UserController.GetCurrentUserInfo().UserID == (int)ThingsForSale.UserID)) { e.Row.Cells[0].Enabled = true;
  • 32. } else { e.Row.Cells[0].Text = " "; } } } (this method casts "e" which is an instance of the object that contains the data for the current row, as a ThingsForSale object. It then compares the UserID to the UserID of the current user. If the UserID matches the current user or the current user is an administrator it enables the first column on the GridView (this allows a user to edit the row)). Add Additional Methods to the Code behind Add these two methods to the code behind: Collapse | Copy Code protected void InsertButton_Click(object sender, EventArgs e) { this.FormView1.Visible = false; LinkButton1.Text = "Update Successful - Add Another Listing"; this.GridView1.DataBind(); } protected void InsertCancelButton_Click(object sender, EventArgs e) { this.FormView1.Visible = false; this.GridView1.DataBind(); } (The events for these two methods was created when the code was pasted in the earlier step) Alter thePage_Load method in the code behind so it reads: Collapse | Copy Code protected void Page_Load(object sender, EventArgs e) { if ((PortalSecurity.IsInRole("Registered Users") || PortalSecurity.IsInRole("Administrators"))) { LinkButton1.Enabled = true; } else { LinkButton1.Text = "You must be logged in to add a Listing"; LinkButton1.Enabled = false; } } (This code determines if the user is logged in and displays the Add Listing link if they are). Save the file. From the Toolbar, select Build then Build Page. The page should build without errors.
  • 33. Create The Module Definition While logged into your DotNetNuke site as "host", in the web browser, from the menu bar select "Host". Then select "Module Definitions". Click the black arrow that is pointing down to make the fly-out menu to appear. On that menu select "Create Module Definition". In the Edit Module Definitions menu: • Enter "LinqThings4Sale" for MODULE NAME • Enter "LinqThings4Sale" for FOLDER TITLE • Enter "LinqThings4Sale" for FRIENDLY NAME • Enter "LinqThings4Sale" for DESCRIPTION • Enter "01.00.00" for VERSION Then click UPDATE
  • 34. Enter "LinqThings4Sale" for NEW DEFINITION Then click "Add Definition" Next, click "Add Control" In the Edit Module Control menu:
  • 35. • Enter "LinqThings4Sale" for TITLE • Use the drop-down to select "DesktopModules/LinqThings4Sale/View.ascx" for SOURCE • Use the drop-down to select "View" for TYPE Then click UPDATE In the upper left hand corner of the website, under the PAGE FUNCTIONS menu click ADD. In the PAGE MANAGEMENT menu under PAGE DETAILS: • Enter "LinqThings4Sale" for PAGE NAME • Enter "LinqThings4Sale" for PAGE TITLE • Enter "LinqThings4Sale" for DESCRIPTION • Click the VIEW PAGE box next to ALL USERS Then click UPDATE
  • 36. From the MODULE drop-down select "LinqThings4Sale". Then click ADD.
  • 37. The module will now appear. The tutorial is complete. Note: In order to run this module on another DotNetNuke site, you need to install ASP.NET 3.5 on the server and modify the web.config of the DotNetNuke site: Change: the <system.codedom> section to: Collapse | Copy Code <system.codedom> <compilers> <compiler language="vb;vbs;visualbasic;vbscript" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" extension=".vb" warningLevel="4"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="OptionInfer" value="true"/> <providerOption name="WarnAsError" value="false"/> </compiler> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers> </system.codedom>  Change: the <assemblies> section to: Collapse | Copy Code <assemblies> <add assembly="Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> <add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
  • 38. <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </assemblies> License This article, along with any associated source code and files, is licensed under The BSD License