simoltaneously. To implement this I have used Repeater Control and DataTable where DataTable is used to store the values entered runtime also remove data if remove command will be passed and Repeater is used to show the data .Final output will be like this one
For this add a repeater control on your aspx and fire properties "onitemcommand " &" onitemdatabound".
<%@ Page
Language="C#"
AutoEventWireup="true"
CodeFile="Default2.aspx.cs"
Inherits="Default2"
%>
<!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>
<asp:Repeater ID="Repeater1"
runat="server"
OnItemCommand="Repeater1_ItemCommand"
OnItemDataBound="Repeater1_ItemDataBound">
<HeaderTemplate>
<table
style="border: thin dotted #0000FF; width: 950px">
<tr>
<th>
File Category
</th>
<th>
File Access
</th>
<th>
File
</th>
<th>
Description
</th>
<th>
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:DropDownList ID="ddlFileCat" runat="server">
</asp:DropDownList>
</td>
<td>
<asp:RadioButtonList ID="rblFileAccsess" runat="server" RepeatDirection="Horizontal">
<asp:ListItem>Public</asp:ListItem>
<asp:ListItem>Private</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:Label ID="lblFileNm" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"FileNm")
%>'></asp:Label>
<asp:FileUpload ID="FileUpload1" runat="server" />
</td>
<td>
<asp:TextBox ID="txtFileDesc" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"FileDesc")
%>'></asp:TextBox>
</td>
<td>
<asp:Button ID="btnAddAnother" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Button")
%>'
CommandName='<%#DataBinder.Eval(Container.DataItem,"Button")
%>' />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
Repeater's ItemDataBound property is used to bind dropdownlist form database and to show the value as selected runtime.
protected void
Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item
|| e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddl = (DropDownList)e.Item.FindControl("ddlFileCat");
RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("rblFileAccsess");
SqlDataAdapter adp = new SqlDataAdapter("SELECT [CategoryID],[CatName] FROM
[dbo].[MST_FileCategory]", con);
DataSet ds = new DataSet();
adp.Fill(ds);
ddl.DataSource
= ds;
ddl.DataTextField = "CatName";
ddl.DataValueField = "CategoryID";
ddl.DataBind();
ddl.SelectedValue = dtTemp.Rows[i]["FileCat"].ToString();
rbl.SelectedValue = dtTemp.Rows[i]["FileAccess"].ToString();
i++;
}
//
ddl.SelectedValue = Eval("FileCat").ToString();
}
To Add or Remove rows from Datatable we will use ItemCommand from where we will pass the Command ADD or REMOVE.
protected void
Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
//int cnt = Repeater1.Items.Count; //get total row count in
repeater
if (e.CommandName == "Add")
{
// cnt++;
AddColumns();
foreach (RepeaterItem
item in Repeater1.Items)
{
//Getting the value of fields
FileUpload fu = (FileUpload)item.FindControl("FileUpload1");
Label fileName = (Label)item.FindControl("lblFileNm");
Button btnAdd = (Button)item.FindControl("btnAddAnother");
if
(btnAdd == e.CommandSource)
{
if (fu.HasFile)
{
string path = Server.MapPath("~/Docs/");
fileName.Text =
fu.FileName;
fu.SaveAs(path +
fileName.Text);
}
}
string fileCat = ((DropDownList)item.FindControl("ddlFileCat")).SelectedValue;
string fileAccess = ((RadioButtonList)item.FindControl("rblFileAccsess")).SelectedValue;
string fileNm = ((Label)item.FindControl("lblFileNm")).Text;
string fileDesc = ((TextBox)item.FindControl("txtFileDesc")).Text;
//now chnage button text to remove & save
values in table
dtTemp.Rows.Add(fileCat, fileAccess, fileNm, fileDesc, "Remove");
}
//Add dummy rows bcoz we neeed to increase
dtTemp.Rows.Add("", "", "",
"", "Add");
BindWithRepeater();
}
else if
(e.CommandName == "Remove")
{
// cnt--;
AddColumns();
foreach (RepeaterItem
item in Repeater1.Items)
{
Button btnAdd = (Button)item.FindControl("btnAddAnother");
if (btnAdd != e.CommandSource)
{
string fileCat = ((DropDownList)item.FindControl("ddlFileCat")).SelectedValue;
string fileAccess = ((RadioButtonList)item.FindControl("rblFileAccsess")).SelectedValue;
string fileNm = ((Label)item.FindControl("lblFileNm")).Text;
string fileDesc = ((TextBox)item.FindControl("txtFileDesc")).Text;
if (btnAdd.Text == "Remove")
{
dtTemp.Rows.Add(fileCat, fileAccess, fileNm, fileDesc, "Remove");
}
else
{
dtTemp.Rows.Add(fileCat, fileAccess, fileNm, fileDesc, "Add");
}
}
}
BindWithRepeater();
}
}
AddColumns() and BindWithRepeater() are user defined functions.Define this functions also and call them in pageload.
public void AddColumns()
{
dtTemp.Columns.Add("FileCat");
dtTemp.Columns.Add("FileAccess");
dtTemp.Columns.Add("FileNm");
dtTemp.Columns.Add("FileDesc");
dtTemp.Columns.Add("Button");
}
public void
BindWithRepeater()
{
//Bind this Dataset to repeater
Repeater1.DataSource = dtTemp;
Repeater1.DataBind();
}
protected void
Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddColumns();
dtTemp.Rows.Add("", "", "",
"", "Add");
BindWithRepeater();
}
}