allenc
6/12/2009 2:44:00 AM
Hi Jeremy,
>That being said, must I take the approach of stepping through each data
row
>and adding it manually to the list box or can one of the data binding
methods
>of the control be overridden to perform this action?
Thanks for your update. If you need a custom control to do this you can try
the code below. The database I used is Northwind database:
<form id="form1" runat="server">
<div>
<cc1:MyListBox Width="600" Height="400" ID="MyListBox1"
runat="server" AddAppendDataToPrefix="true"
DataSourceID="SqlDataSource1" DataTextField="CompanyName"
DataTextFieldSeparatorString=" |separator_test| "
DataTextAppendField="Address"
DataValueField="CustomerID">
</cc1:MyListBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$
ConnectionStrings:NorthwindConnectionString1 %>"
DeleteCommand="DELETE FROM [Customers] WHERE [CustomerID] =
@CustomerID"
InsertCommand="INSERT INTO [Customers] ([CustomerID],
[CompanyName], [ContactName], [ContactTitle], [Address], [City], [Region],
[PostalCode], [Country], [Phone], [Fax]) VALUES (@CustomerID, @CompanyName,
@ContactName, @ContactTitle, @Address, @City, @Region, @PostalCode,
@Country, @Phone, @Fax)"
ProviderName="<%$
ConnectionStrings:NorthwindConnectionString1.ProviderName %>"
SelectCommand="SELECT [CustomerID], [CompanyName],
[ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode],
[Country], [Phone], [Fax] FROM [Customers]"
UpdateCommand="UPDATE [Customers] SET [CompanyName] =
@CompanyName, [ContactName] = @ContactName, [ContactTitle] = @ContactTitle,
[Address] = @Address, [City] = @City, [Region] = @Region, [PostalCode] =
@PostalCode, [Country] = @Country, [Phone] = @Phone, [Fax] = @Fax WHERE
[CustomerID] = @CustomerID">
<DeleteParameters>
<asp:Parameter Name="CustomerID" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="CustomerID" Type="String" />
<asp:Parameter Name="CompanyName" Type="String" />
<asp:Parameter Name="ContactName" Type="String" />
<asp:Parameter Name="ContactTitle" Type="String" />
<asp:Parameter Name="Address" Type="String" />
<asp:Parameter Name="City" Type="String" />
<asp:Parameter Name="Region" Type="String" />
<asp:Parameter Name="PostalCode" Type="String" />
<asp:Parameter Name="Country" Type="String" />
<asp:Parameter Name="Phone" Type="String" />
<asp:Parameter Name="Fax" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="CompanyName" Type="String" />
<asp:Parameter Name="ContactName" Type="String" />
<asp:Parameter Name="ContactTitle" Type="String" />
<asp:Parameter Name="Address" Type="String" />
<asp:Parameter Name="City" Type="String" />
<asp:Parameter Name="Region" Type="String" />
<asp:Parameter Name="PostalCode" Type="String" />
<asp:Parameter Name="Country" Type="String" />
<asp:Parameter Name="Phone" Type="String" />
<asp:Parameter Name="Fax" Type="String" />
<asp:Parameter Name="CustomerID" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
</div>
</form>
public class MyListBox : ListBox {
public string DataTextFieldSeparatorString { get; set; }
public bool AddAppendDataToPrefix { get; set; }
public string DataTextAppendField { get; set; }
protected override void PerformDataBinding(IEnumerable dataSource)
{
base.PerformDataBinding(dataSource);
StringBuilder sb = new StringBuilder();
int i = 0;
foreach (object obj in dataSource)
{
if (!string.IsNullOrEmpty(DataTextField) &&
!string.IsNullOrEmpty(DataTextAppendField))
{
string appendString = DataBinder.GetPropertyValue(obj,
DataTextAppendField, DataTextFormatString);
if (AddAppendDataToPrefix)
{
sb.Append(appendString);
if(!string.IsNullOrEmpty(appendString))
sb.Append(DataTextFieldSeparatorString);
sb.Append(DataBinder.GetPropertyValue(obj,
DataTextField, DataTextFormatString));
}
else
{
sb.Append(DataBinder.GetPropertyValue(obj,
DataTextField, DataTextFormatString));
if(!string.IsNullOrEmpty(appendString))
sb.Append(DataTextFieldSeparatorString);
sb.Append(appendString);
}
this.Items[i].Text = sb.ToString();
}
i++;
sb.Remove(0, sb.Length);
}
}
}
Please let me know if it can meet your requirement.
Regards,
Allen Chen
Microsoft Online Support