Item 1
Absolutely can be done. You should be able to just drag the field onto your report.
Item 2
You can set up the 4 parameters to the report and send the values in your code.
Item 3
A totally variable number of columns is not do-able. There are ways around this, but you'll have to know the absolute MAX number of possible columns that can be on the report. You then set up the dataset with that many columns. Also, one of the issues you may run into if they select too many columns is the amount of "real estate" available on the report for displaying all of the columns.
Also, in order to design the report, your ado.net dataset will have to have a pre-specified set of columns so that the report "sees" them at design-time. You should give these columns generic names and then put the correct data into them from your application in the order that the user wants them displayed, leaving any unused columns null. In your report you can set the suppress formula on the fields to suppress them if the value in the field is null.
Item 4
This is quite possible. In the report design, right-click on each field in the details line of the report, select "Format Object" (in VS2005) or "Format Field" (in Crystal) and go to the Fonts tab. Click on the formula button next to the Color drop-down and, assuming that "certain text" is always the same, enter something like the following:
If {table.certain_column} = "certain text" then
red
else
black
In the formula for StrikeThrough, you'll put something like this:
{table.certain_column} = "certain text"
(This expression just needs to resolve to True or False.)
Good luck!
-Dell